У меня есть объект класса Chat *p
, и я ищу, чтобы запустить метод Foo(int num)
на нем (обычно работает p → Foo(3)
). Я написал этот код:
std::thread F(&Chat::Foo, 4);
хотя, это не компилируется для меня, и я также вижу, что theres ошибка, так как я не смог поместить p → Foo
в нее (вместо &Chat::Foo
...)
Как я могу запустить этот код правильно?
Благодарю!
Ответ от того, как работают объектные методы. Когда вы вызываете p->foo(3)
то, что компилятор переводит, грубо говоря, это Chat::foo(p, 3)
. P
всегда передается как скрытый параметр при любом вызове функции. C++ не показывает вам это, и вы не можете на самом деле вызвать Chat::foo(p, 3)
, это просто не разрешено, но это примерно так, как все работает на самом деле.
Переменная this
, которая доступна в любой функции члена только адрес, который передается в качестве скрытого первого параметра и любых переменных - членов, доступ к которым в функции ведения скрытого первого параметра. Итак... что вам нужно сделать, чтобы вызвать любую функцию-член в качестве отправной точки для потока, передает указатель на объект в качестве первого параметра. std::thread F(&Chat::Foo, p, 4);
будет, я считаю, правильно начать поток.