2015-06-21 41 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等进行特殊的变化。 –

相关问题