我有一个班级Foo
,其中包含vector
个Bar
:
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
添加到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
答案 0 :(得分: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
}