2011-09-05 75 views
0

這是我第一次嘗試使用boost :: threads,我有一個愚蠢的問題。 我稱boost:thread來使用我的一個模板類函數。然而,在閱讀this tutorial之後,它說要構建一個operator()()我就是這麼做的。 下面的代碼是否正常工作?C++ boost :: thread operator()()問題

template <class S> 
class SarsaL : public Task<S,Policy>, protected Method 
{ 
    protected: 
    ... 
    void updateEpsilons(S* avoid); 
    void step(); 
    ... 
    public: 
    ... 
    void operator()(); 
    ... 
}; 

template <class S> 
void SarsaL<S>::operator()() 
{ 
    updateEpsilons(); 
} 

template <class S> 
void SarsaL<S>::step() 
{ 
    S* now_state = Task<S,Policy>::checkIfAdd(); 
    ... 
    ... 
    boost::thread workerThread(&SarsaL<S>::updateEpsilons, this, now_state); 
    ... 
    ... 
    workerThread.join(); 
} 

的原因,我問的是,因爲我打電話了運營商內部updateEpsilons()不帶參數,但在創建線程時我送參數now_state。這會工作還是不爭論?代碼編譯和執行沒有錯誤,我只是困惑。

回答

2

如果您在要執行的對象上提供方法(在此例中爲updateEpsilons),則不必使用operator()()。顯然這operator()()是不正確的,因爲它沒有調用具有參數的適當的updateEpsilons方法。

請注意,在本教程中,創建新線程只給出一個類的實例,並且沒有方法。在這種情況下,該類必須實現operator()(),這將被稱爲線程的代碼。