Итак, у меня есть этот базовый класс, который создает поток, который вызывает виртуальный метод при построении. Он был разработан таким образом, потому что я просто хочу, чтобы другие разработчики переопределили этот метод, а не как конструктор, так и этот метод. Поэтому, когда я наследую этот класс, я предполагал, что метод, который будет называться, является переопределением. это не сработало. мой код для конструктора следующий:Переопределить функции потоков C++
IOHandler::IOHandler(int refresh_rate)
{
alarm_is_set = false;
terminate_threads = false;
init_complete = false;
update_cycle_thread = std::thread (& IOHandler::update_cycle,
this,
refresh_rate);
}
но когда я создаю дочерний класс f.e.
class childClass: public IOHandler
{
void update_cycle(int refresh_rate) override;
}
функция, которая называется это IOHandler :: update_cycle, не переопределение, можно делать то, что я хочу сделать? С уважением
Вы не должны вызывать виртуальные функции из конструктора C++. См. Http://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors – vz0
@ vz0: Нет ничего плохого в вызове виртуальных функций из конструктора C++. Просто не ожидайте, что он сделает что-то, чего он не собирается делать (то есть продвигается дальше по иерархии наследования, чем до сих пор). Я понятия не имею, о чем говорят эти ответы. Теперь, делая это в создании объекта потока ... это другое :) –
что-то делать с потоками в конструкторе - это почти всегда ужасная идея. Постройте свой объект, а затем вызовите 'start()' на нем. Если это невозможно, создайте обертку, которая владеет объектом и делает именно это. В противном случае путь сожаления будет вашим. –