В C++ 11 я хочу создать объекты классов Foo
и Alpha
(foo
и alpha
соответственно). Затем я хочу создать поток, который вызывает функцию alpha
, передавая foo
в качестве аргумента. Пока этот поток работает, я тогда хочу иметь возможность изменять foo
.C++ 11 Многопоточность с общим объектом
Вот мой код до сих пор:
#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
.
Любая помощь?
Пожалуйста, прекратите рыбалку шаг за шагом, чтобы получить ответы и получить информацию. –