异步调用模板函数

用户名

当函数接受模板参数时,需要异步运行函数。下面的代码无法编译,有帮助吗?

 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章