class Buff {
public:
void use(Mob& mob_passive) {
::std::thread threading{&Buff::apply_buff, this, mob_passive}; // Пробовал с this и без него
threading.detach();
}
void apply_buff(Mob& mob_passive) {
use_all_buffs(mob_passive);
Sleep(seconds * 1000);
complete(mob_passive);
delete this;
}
....
Выдаёт ошибку:
C2672 "std::invoke": не найдена соответствующая перегруженная функция - xthread:238
C2893 Сбой при специализации функции-шаблона "unknown-type std::invoke(_Callable &&,_Types &&...) noexcept()" - xthread:237
Сделал рабочий код из Вашего, заменив mob_passive
на std::ref(mob_passive)
в третьем аргументе конструктора:
class Buff {
public:
void use(Mob& mob_passive) {
::std::thread threading{&Buff::apply_buff, this, std::ref(mob_passive)}; // Пробовал с this и без него
threading.detach();
}
void apply_buff(Mob& mob_passive) {
use_all_buffs(mob_passive);
Sleep(seconds * 1000);
complete(mob_passive);
delete this;
}
....
По всей видимости, проблема была в том, что ссылка автоматически разыменовывается везде, где Вы её используете. Следовательно в метод apply_buff
передавалось значение типа Mob
вместо Mob&
. В std
есть функция для получения ссылки из значения – ref
, которую можно использовать для передачи ссылки в качестве аргумента функции.
P.S. При попытке воспроизвести Ваш код, уже после запуска программы, она крашнулась из-за delete this;
. Не уверен, что это хорошо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь испробовать в действии алгоритм Диффи-ХеллманаВзял код отсюда:
Во многих гуидах написано, что лямбда выражения в с++ это всего лишь синтаксический сахар для анонимных функторовНо при обработке, скажем,...