gpt4 book ai didi

带有函数指针的 C++ vector push_back

转载 作者:行者123 更新时间:2023-11-27 22:44:15 24 4
gpt4 key购买 nike

我有一个 Foo 类,它包含 Barvector:

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 vector 中:

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

如何使用 std::function 设置函数指针?并且还没有创建单独的对象并将 push_back 放入 vector 中?就像上面那行,我得到错误的地方:

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
}

关于带有函数指针的 C++ vector push_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com