我有以下代码使用可变参数模板来调用std::async,
struct TestParent
{
template< typename Fn, typeName ...Args >
bool checkBlock( bool& toCheck,
Fn&& fn, Args&& ... args )
{
int startIndx = 0;
int endIndx = 10;
std::future< bool > tk( std::async( std::launch, fn, this,
startIndx, endIndx,
toCheck, args ... ) );
return tk.get();
}
}
struct TestChild: public TestParent
{
bool checkRules( const int, const int, bool& std::vector< bool >& );
bool check();
}
bool TestChild::checkRules( const int startIndx, const int endIndx,
bool& toCheck,
std::vector< bool >& results )
{
toCheck = true;
for ( int indx = startIndx; indx < endIndx; ++ indx )
{
bool checkedOk;
... do something checking.
results.push_back( checkedOk );
}
return true;
}
bool TestChild::check()
{
bool toCheck;
std::vector< bool > results;
return checkBlock( toCheck, &testChild::checkRules, this, &results);
}
但我收到以下编译错误消息:
没有用于调用“async(std::launch,bool (TestChild::
我认为这可能与我传递其他参数以及参数包的事实有关。任何人都知道这有什么问题,我应该做些什么来让它发挥作用?
return checkBlock( toCheck, &testChild::checkRules, this, &results);
您正在将this
与您的Args
一起传递,它与您的参数与您的函数不匹配,因此有一个额外的TestUNICEF*
return checkBlock( toCheck, &testChild::checkRules, ~~this~~, &results);
就是去掉~~这个~~
此外,您应该std::forward您的< code>Args
如下所示:
toCheck, std::forward<Args>(args) ... ) );
这是守则中的两个主要问题:
(1) std::async
在将所有传递的参数转发到提供的函数之前衰减它们,这意味着< code>checkRules中的references参数不同于< code>async在调用函数时试图使用的类型,您需要进行以下更改:
template< typename Fn, typename ...Args >
bool checkBlock( std::reference_wrapper<bool> const& toCheck,
Fn&& fn, Args&& ... args )
{
int startIndx = 0;
int endIndx = 10;
std::future< bool > tk(std::async(std::launch::async,
std::forward<Fn>(fn),
startIndx, endIndx,
toCheck,
std::forward<Args>(args) ... ) );
return tk.get();
}
(2) 您将<code>this</code>作为参数传递给<code>checkBlock</code>它最终将作为<code>检查规则</code>的参数(通过异步调用),但成员函数不接受<code>TestChild*异步,因此需要使用std::bind
来绑定此
参数,并使用std::wrap
来修改参数:
#include <functional>
using namespace std::placeholders;
bool TestChild::check()
{
bool toCheck;
std::vector< bool > results;
return checkBlock( std::ref(toCheck), std::bind(&TestChild::checkRules, this, _1, _2, _3, _4), std::ref(results));
}
template.defaults.imports 模板通过 $imports 可以访问到模板外部的全局变量与导入的变量。 导入变量 template.defaults.imports.log = console.log; <% $imports.log('hello world') %> 内置变量清单 $data 传入模板的数据 $imports 外部导入的变量以及全局变量 print 字符
我的函数使用一组给定的输入参数(变量)调用Python函数,并返回包含函数输出的元组(变量,因为输出随调用的函数而变化)。 我正在使用C 11通过MinGW-w64编译器的g端口在视窗10机器上编译。我声明了这个模板变量函数(并调用它)如下: 但是,会引发此错误(为了可读性,缩短为):
我目前正在从事一个项目,该项目需要一个生成简单XML的对象。我对XML很陌生,还在学习c 我试图实现的是一个可以在代码中这样调用的函数: 在这一行之后,字符串应该包含如下内容:
问题内容: 我试图将值放入“标题”模板中,例如标题和导航链接,但无法访问我从包含的模板发送到主模板的变量。 渲染模板: index.html模板: header.html模板: 显然,它不会那样工作。 也许有一种方法可以解析/获取模板并将变量放入其中,而无需将整个头文件放入代码中?然后,我可以将该模板作为变量发送到我的主模板。但这似乎并不是最好的方法。 问题答案: 您可以在调用模板时将上下文传递给
我想确认这个代码是合法的(还是不合法的?)C++17。 如果用G++和MSVC编译,我不会得到错误(并得到正确的输出), 但Intel和clang给出了一个错误: 使用编译(对于MSVC)。 在godbolt和我的本地机器上尝试了最新的编译器。
YDoc 主题的模板是若干的 jsx 组件,以下是各模板文件相对应的功能(按首字母排序): 模板 功能 Content.jsx 文档页内容 Footer.jsx (用户自定义组件) Footer 信息 Head.jsx html 文件中 部分的内容 Header.jsx 顶部导航 Homepage.jsx (用户自定义组件) 文档站首页 Hook.jsx 钩子,用于自定义插件 Icon.jsx f