C++ 使用异步调用模板函数

C++ 使用异步调用模板函数,c++,multithreading,asynchronous,C++,Multithreading,Asynchronous,当函数接受模板参数时,需要异步运行函数。下面的代码没有编译,有帮助吗 样板 void sayint n,T{ cout基本上,假设它不是一个函数,它是一个函数模板。你不能用&获取模板的地址 只要改变一下: reallyAsync(&say, n, x) 致: 基本上说,它不是一个函数,它是一个函数模板。你不能用&获取模板的地址 reallyAsync(&say, n, x) 只要改变一下: reallyAsync(&say, n, x) 致: 它应该会起作用 re

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

样板 void sayint n,T{ cout基本上,假设它不是一个函数,它是一个函数模板。你不能用&获取模板的地址

只要改变一下:

reallyAsync(&say, n, x)
致:

基本上说,它不是一个函数,它是一个函数模板。你不能用&获取模板的地址

reallyAsync(&say, n, x) 
只要改变一下:

reallyAsync(&say, n, x)
致:

它应该会起作用

reallyAsync(&say, n, x) 

是模板。在C++中,你不能取模板的地址。这是一个毫无意义的命题。< /P> 理解模板和模板实例之间的区别很重要。模板只不过是某种规格说明。它不存在于任何实际或有意义的术语中。运算符的地址只能用于以某种方式存在于某处的真实对象

要消除编译错误,必须实例化模板,将其转化为有形的内容:

reallyAsync(&say<float>, n, x);
从您的角度来看,这可能并不理想,并且违背了模板函数的目的。可能有一种更好、不同的方法来完成您真正想要完成的事情,即不需要显式的模板实例化

是模板。在C++中,你不能取模板的地址。这是一个毫无意义的命题。< /P> 理解模板和模板实例之间的区别很重要。模板只不过是某种规格说明。它不存在于任何实际或有意义的术语中。运算符的地址只能用于以某种方式存在于某处的真实对象

要消除编译错误,必须实例化模板,将其转化为有形的内容:

reallyAsync(&say<float>, n, x);
从您的角度来看,这可能并不理想,并且会破坏模板函数的用途。可能有一种更好的、不同的方法来完成您真正想要完成的事情,它不需要显式的模板实例化。

如果是函数模板,您就不能获取函数模板的地址,因为它还没有函数见注释:

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.
 }
但是,您可以传递示例,例如:

假设是函数模板,您不能获取函数模板的地址,因为它还不是函数请参见注释:

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.
 }
但是,您可以传递示例,例如:


这将有助于添加编译器抛出的错误out@Stormenet或者使用了哪个编译器。这将有助于添加编译器抛出的错误out@Stormenet或者使用了哪个编译器。