2016-03-15 28 views
1

我想在單獨的線程中啓動std :: function類型。 我的代碼目前看起來是這樣的:使用變量類型的std :: function運行線程

struct bar 
{ 
    std::function<void(int,int)> var; 
}; 

struct foo 
{ 
    bar* b; 

    foo() 
    { 
     std::thread t(b->var); //Error attempt to use a deleted function 
    } 
}; 

爲什麼我會得到嘗試在這裏使用已刪除的功能?

+0

編譯器錯誤告訴你它是哪個被刪除的函數,這將是一個很大的線索。可悲的是,你出於某種原因不能將這部分置於問題之外。 –

+0

你的例子充滿了錯誤。但是像這樣的東西應該可以完成這個工作:'std :: thread(&bar :: var,b,12,12)' – knivil

+0

你有意不把'b'設置成任何東西嗎? – Soren

回答

3

您的變量b->var是一個帶有兩個參數的函數。你需要發送這些參數來使其工作。

struct bar 
{ 
    std::function<void(int,int)> var; 
}; 

struct foo 
{ 
    bar* b; 
    foo() 
    { 
     std::thread t(b->var, 76, 89); // will call b->var(76, 89) 
    } 
}; 
+0

你試過編譯它嗎? – knivil

+0

編輯我的答案來解決這些錯誤。謝謝! –