我尝试生成一种创建具有类方法的线程的通用方法。但是我无法成功编译代码
我使用以下代码
#include <iostream>
#include <thread>
#include <functional>
using namespace std;
class hello{
public:
void f(){
cout<<"f"<<endl;
}
virtual void ff(){
cout<<"ff"<<endl;
}
};
template <typename T, T> struct proxy;
template <typename T, typename R, typename ...Args, R (T::*mf)(Args...)>
struct proxy<R (T::*)(Args...), mf>
{
static R call(T & obj, Args &&... args)
{
// function func = T::*mf;
thread t(&T::*mf, &obj);
return (obj.*mf)(std::forward<Args>(args)...);
}
};
int main(){
hello obj;
typedef proxy<void(hello::*)(), &hello::f> hello_proxy;
hello_proxy::call(obj);
}
编译时会产生以下错误
In static member function 'static R proxy<R (T::*)(Args ...), mf>::call(T&, Args&& ...)':
24:22: error: expected unqualified-id before '*' token
最佳答案
thread t(&T::*mf, &obj);
&T::*mf
是错误的语法。只需使用mf
。 thread t(mf, &obj);