struct Base {
virtual void do_work()= 0;
};
struct Derived_A : Base {
void do_work() override{
// work A
}
};
struct Derived_B : Base {
void do_work() override{
// work B
}
};
int main() {
std::vector<std::unique_ptr<Base>> workers;
workers.emplace_back(std::unique_ptr<Base>(newDerived_A()) 。)
workers.emplace_back(std::unique_ptr<Base>(newDerived_B() )。
std::vector<std::thread> threads。
for (const auto& worker : workers) {
//編譯錯誤。
//期待Derived_A和Derived_B do_work函式被分別呼叫。
threads.emplace_back(&Base::do_work, worker)。
}
}
在執行緒中呼叫do_work()方法的正確方法是什么?
uj5u.com熱心網友回復:
多型性應該只是作業,因為一個指向虛擬成員函式的指標在被呼叫時總是表現為多型性。要使你的程式正確,只需要做兩處修改:
你必須在創建執行緒時寫下
worker.get()。這是因為成員函式Base::do_work的指標是可以 "呼叫 "的,引數是指向Base的指標,但你不能直接 "傳遞 "一個智能指標給它。
main結束前分離或加入執行緒。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314153.html
標籤:
