2015-06-21 39 views
0

我是C++的新手。我學習一個簡單的例子(見下面的代碼)。我不能說明重載「()」的目的是什麼。 std::thread my_thread(my_func);中使用「overloading()」嗎?什麼是圓括號「()」 - 在本例中的重載意味着

感謝您的關注。

struct func 
{ 
int& i; 
func(int& i_) : i(i_) {} 
**void operator()()** // the question point 
{ 
for (unsigned j=0 ; j<1000000 ; ++j) 
{ 
    do_something(i);   
} 
} 
}; 
void oops() 
{ 
int some_local_state=0; 
func my_func(some_local_state); 
std::thread my_thread(my_func); 
my_thread.detach();   
} 
+0

我明白這是重載的功能操作。所以你可以把對象的一個​​實例轉換成一個函數。也稱爲重載括號操作符。這可能有助於確定正確的教程,祝你好運! – PunkUnicorn

+1

在網絡中搜索術語「仿函數」或「函數對象」。 –

+0

感謝大家 – rayallen

回答

1

有了您的func my_func(some_local_state);, 你現在可以稱之爲my_func();喜歡它
是一個功能(而不是像my_func.dosomething();),並在
環路操作功能將被執行。

std::thread以這種方式使用(無論什麼原因,創作者只是喜歡它)。
所以沒有operator(),你的對象是沒有意義的std::thread

+0

(順便說一下,我知道一個原因是讓函子的東西類似於真正的函數調用。但仍然沒有改變這個事實,即沒有「技術」的原因,C++標準的comitee只是喜歡它方式) – deviantfan

+0

它允許std ::線程被創建爲「可調用」的任何內容,而不需要對自由函數,成員函數,lambdas等進行特殊的變化。 –

相關問題