2017-07-09 132 views
0

我有一個類Foo含有Bar s的vectorC++矢量的push_back與函數指針

class Foo 
{ 
public: 
    void create(); 
    void callback(); 

    std::vector<Bar> mBars; 
} 

Bar類包含此構造:

class Bar 
{ 
    Bar(const int x, const int y, std::function<void()> &callback); 
} 

Foo類有一個create()方法,將Bar s添加到mBars向量中:

void Foo::create() 
{ 
    mBars.push_back({ 1224, 26, callback }); //ERROR! 
} 

如何設置函數指針,使用std::function?也沒有創建一個單獨的對象和push_back成矢量?像上面的線,在那裏我得到的錯誤:

E0304 no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=CV::Button, _Alloc=std::allocator<Bar>]" matches the argument list  
+1

你沒有拿這個函數的指針。另外對於'std :: function',你必須使用'std :: bind'。 – tambre

+0

另外,您可能想查看['vector :: emplace_back()'](http://en.cppreference.com/w/cpp/container/vector/emplace_back)。 –

回答

4

callback是一個成員函數,需要this正常工作(除非你讓靜態的,當然)。您可以使用std::bind或lambda函數,然後將其包裝到std::function中。

void Foo::create() 
{ 
    std::function<void()> fx1 = [this](){ callback(); }; 
    std::function<void()> fx2 = std::bind(&Foo::callback, this); 
    //mBars.push_back({ 1224, 26, callback }); //ERROR! 
    mBars.emplace_back(Bar{ 1224, 26, fx1 }); //ok 
    mBars.emplace_back(Bar{ 1224, 26, fx2 }); //ok 
} 
+0

謝謝凱文。這正是我需要的:) – waas1919