Нужно что бы конструктор абстрактного базового класса запускал в отдельном потоке чисто виртуальный метод, определённый дочерним классом. Что-то похожее на
struct A {
virtual void ex() = 0;
A() {
thread(ex); //Должен запуститься метод B::ex()
}
};
struct B :A {
void ex() {
cout << "ex\n";
}
};
Я пытался передавать в базовый конструктор указатель на метод, который нужно запустить, из дочернего конструктора:
struct A {
virtual void ex() = 0;
template<typename F, typename T>
A(F f, T t) {
thread tr(f, t);
}
};
struct B :A {
void ex() {
cout << "ex\n";
}
B() :A(&B::ex, this) {}
};
Вылетает ошибка abort has been called.
Как можно добиться подобного поведения?
Никак. Вызов виртуальных методов дочернего класса в конструкторе базового - UB
Сборка персонального компьютера от Artline: умный выбор для современных пользователей