Итак, моя проблема начинается примерно так:
Запуск потока с функцией-членом
У меня есть класс Foo, который выглядит следующим образом:
struct Foo
{
int y;
thread t;
void set(int x){
y = x;
}
void plan(int x){
thread = std::thread ([&]{
set(x);
});
void get(){
if (t.joinable())
t.join();
}
};
Другие ответы также предлагают:
void plan(int x){
thread = std::thread(&Foo::set, this, x);
};
Теперь я хочу использовать Foo
в качестве базового класса для различного дочернего класса с перегруженными функциями set()
, например:
struct Bar: public Foo
{
void set(int x){
y = x*2;
}
}
Моя проблема в том, что если сделать это таким образом, Bar::plan()
приведет к запуску Foo::set()
в новом потоке вместо Bar::set
, как ожидалось.
Есть ли другое решение, чем необходимость повторной записиplan()
метод в каждом дочернем классе Foo
?