Как исправить ошибку 'сбой при специализации функции-шаблона' (многопоточность)?
Всё становится проще с лямбдами:// Было
std::thread someFuncThread(someFunc(data), data);
// Стало
std::thread someFuncThread([this, data] { return this->someFunc(data); });
Аналогично будет в другом месте. Помните:this тоже надо захватывать, и этого не избежать вызовом метода без this, то есть как someFunc(data)Это ваши проблемы следить за тем, что на момент вызова объект *this "жив"data здесь захватывается по значению. Если объём данных большой, и вы можете гарантировать их время жизни, то захватите по ссылке: [this, &data]Upd Как отложить запуск:std::thread someFuncThread;
//...
someFuncThread = std::thread( создаём_как_показано_выше );
en.cppreference.com/w/cpp/thread/thread/threadint run(); // Имеет тип `int (FirstClass::*)()`. А конструктору `std::thread` нужен или функтор, или глобальная функция.
Перепиши `run()` на статическую и передавай инстанцию объекта `FirstClass` параметром при запуске.
иное решение - использовать лямбду с замыканием на this.FirstClass::FirstClass() : /* список инициализаторов */ firstClassThread([this](){ run(); }) { }
Имей в виду что поток запустится сразу же после завершения конструктора `std::thread`.
en.cppreference.com/w/cpp/thread/threadThreads begin execution immediately upon construction of the associated thread object (pending any OS scheduling delays), starting at the top-level function provided as a constructor argument.
Буквально, поток запускается сразу после его конструирования.
en.cppreference.com/w/cpp/thread/thread/detachSeparates the thread of execution from the thread object, allowing execution to continue independently.
А вот `detach` ничего с запуском потока, или с самим потоком, не делает, она только сбрасывает состояние объекта потока, обрывает связь между объектом потока и самим потоком.
Может тебе стоит как-то иначе запускать поток, в другое время? Если тебе все таки надо запустить поток в другое время, его в это время и надо конструировать.