当函数接受模板参数时,需要异步运行函数。下面的代码无法编译,有帮助吗?
template<typename T>
void say(int n, T t) {
cout << " say: " << n << " " << t << endl;
}
template<typename F, typename... Ts>
inline auto reallyAsync(F&& f, Ts&&... params){
return std::async(
std::launch::async,
std::forward<F>(f),
std::forward<Ts>(params)...);
}
int main() {
int n = 10; float x = 100;
say(n, x); // works
reallyAsync(&say, n, x) ; // does not work
}
say
是一个功能模板,您不能使用该功能模板的地址,因为它还不是一个功能(请参见注释):
int main() {
int n = 10; float x = 100;
say(n, x); // works because of template argument deduction
reallyAsync(&say, n, x); //fails because say isn't a resolved function.
}
但是,您可以传递say的实例化:
int main() {
int n = 10; float x = 100;
say(n, x); // works
reallyAsync(&say<decltype(x)>, n, x);
}
输出:
say: 10 100
say: 10 100
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句