鍍金池/ 問答/C++  Linux/ c++11shared_ptr存儲線程

c++11shared_ptr存儲線程

class t  
{
public:
    vector<shared_ptr<thread> > t1;
public:
    t() 
    {
        for (int i = 0; i < 3; i++) 
        {
            t1.push_back(make_shared<thread>(&t::Func, this)); //(1)
        }
    }
    void Func() 
    {
        cout << " hello world!" << endl;
    }
};

請問為什么在(1)的地方一定要如此初始化呢,
不寫成這樣他的報錯會是:
t。錯誤:ISO c++禁止使用非限定或圓括號的非靜態(tài)成員函數(shù)的地址來形成成員函數(shù)的指針
是因為禁止直接將非靜態(tài)的類成員函數(shù) t::Func 直接轉(zhuǎn)換到thread類指針么?,
如果是因為這樣那為什么一定要這樣寫呢? 像&(t::Func)也會報上面的錯

回答
編輯回答
笑忘初

t::Funct的成員函數(shù),有一個隱藏參數(shù)this,自然要先傳一個參數(shù)進去。。
t1.push_back(make_shared<thread>(&t::Func, NULL)); //(1) 你這么寫也行。。

2017年2月4日 23:08