c++ - 使用异步调用模板函数

标签 c++ multithreading asynchronous

当函数采用模板参数时,需要异步运行一个函数。下面的代码无法编译,有什么帮助吗?

 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

Live Example

关于c++ - 使用异步调用模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42415186/

相关文章:

c++ - 如何从 ProgID 或 CLSID 获取类型库(不加载 COM 对象)?

c++ - std::vector 在哪里分配内存?

c++ - std::map<whatever,double> 是否自动将值归零?

multithreading - 使用同步函数时,FastAPI 跨线程共享 SQLAlchemy session

c# - .NET 单任务等待的用例

c++ - 何时链接,何时包含?

java - 显示所有小于输入的素数的多线程程序

C 在另一个线程中运行函数

rest - Rest api中的redis key 更新通知

c# - SendToAsync 内存泄漏?