簡體   English   中英

在C ++中使用Async通過指針調用虛擬函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM