我想写一个模板函数,它可以接受任何类/结构的对象并在线程中调用它的任何成员函数。以下不编译,估计是想不通:std::result_of< F(Args...) >::type
.
任何建议,帮助..?
class test_f {
public:
int f(int m) {
std::cout << " call f : " << m << std::endl;
return 1;
}
};
template<typename F, typename T, typename... Args>
std::future<typename std::result_of<F(Args...)>::type>
Async(F&& f, T&& t, Args&&... params) {
return(std::async(std::launch::async, std::forward<F>(f),
std::forward<T>(t), std::forward<Args>(params)...));
}
int main() {
test_f tf ;
auto a = Async(&test_f::f, &tf, 1) ;
}
最佳答案
如果你能用C++14,就用auto
:
template<typename F, typename T, typename... Args>
auto Async(F&& f, T&& t, Args&&... params) {
return(std::async(std::launch::async, std::forward<F>(f),
std::forward<T>(t), std::forward<Args>(params)...));
}
否则你需要这样的东西:
auto Async(F&& f, T&& t, Args&&... params)
-> std::future<decltype(
(t->*f) (std::forward<Args>(params)...) )>
)> { // .. same as before
关于c++ - 使用 std::async 启动类成员函数的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39893594/