[英]Calling a virtual function through a pointer using async in c++
我是多線程的新手,對編程的了解有限。 我想在C ++中使用異步函數來調用虛擬函數。 下面是代碼片段。 任何幫助將非常感激。
class Binary_Genome: public Individual
{
public:
std::string evaluate_fitness();
}
class Individual
{
public:
virtual std::string evaluate_fitness()=0;
}
int main()
{
std::string w_list;
Individual* current_ind;
//Skipped some code here
std::future<std::string> future_strs;
future_strs = std::async(current_ind->evaluate_fitness); //Complier does not understand this line.
w_list = future_strs.get();
return 0;
}
編譯錯誤:
error: invalid use of non-static member function
我了解std :: async(current_ind-> evaluate_fitness)語法錯誤。 但是,我不知道正確的語法是什么。 該代碼可以完美地運行而無需異步(w_list = current_ind-> evaluate_fitness())。 謝謝您的幫助。
即使進行編譯,由於Individual* current_ind;
也會導致內存錯誤Individual* current_ind;
不初始化指針。 當前它指向垃圾內存地址。
您可以在std::async
使用指向對象的指針:
Object obj;
Object* pointer = &obj;
auto fut = std::async([pointer]{ return pointer->returnSomthing(); });
只要異步函數運行,請確保obj
仍然有效。 std::shared_ptr
非常適合這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.