我尝试生成一种创建具有类方法的线程的通用方法。但是我无法成功编译代码
我使用以下代码

#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);

10-08 08:21