<分区>
在 C++11 中,我想创建类 Foo
和 Alpha
的对象(foo
和 alpha
,分别)。然后我想创建一个调用 alpha
函数的线程,将 foo
作为参数传递。在该线程运行的同时,我希望能够修改 foo
。
到目前为止,这是我的代码:
#include <thread>
#include <iostream>
class Foo
{
public:
int x;
void Bar()
{
std::cout << x << std::endl;
}
};
class Alpha
{
public:
void Beta(Foo& foo)
{
while (true)
{
foo.Bar();
}
}
};
int main()
{
Foo foo;
foo.x = 5;
Alpha alpha;
std::thread beta_thread(&Alpha::Beta, alpha, foo);
beta_thread.join();
while (true)
{
foo.x++;
}
return 0;
}
但是,这给了我一个编译错误:
/usr/include/c++/4.8/functional:1697: error: no type named 'type' in 'class std::result_of<std::_Mem_fn<void (Alpha::*)(Foo&)>(Alpha, Foo)>'
typedef typename result_of<_Callable(_Args...)>::type result_type;
^
如果我按值而不是引用传递 foo
(void Beta(Foo foo)
),那么它编译正常。但是,我相信我需要通过引用传递,这样当我在主循环中修改 foo
时,它会更改我传递给 Beta
的同一个实例。
有什么帮助吗?