带有函数指针的 C++ 向量 push_back
C++ vector push_back with pointer to function
我有一个 class Foo
,其中包含 vector
个 Bar
:
class Foo
{
public:
void create();
void callback();
std::vector<Bar> mBars;
}
我的 Bar
class 包含这个构造函数:
class Bar
{
Bar(const int x, const int y, std::function<void()> &callback);
}
我的 Foo
class 有一个 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
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
}
我有一个 class Foo
,其中包含 vector
个 Bar
:
class Foo
{
public:
void create();
void callback();
std::vector<Bar> mBars;
}
我的 Bar
class 包含这个构造函数:
class Bar
{
Bar(const int x, const int y, std::function<void()> &callback);
}
我的 Foo
class 有一个 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
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
}