gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:26:50 24 4
gpt4 key购买 nike

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

 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com