【问题标题】:C++ vector push_back with pointer to function带有指向函数的指针的 C++ 向量 push_back
【发布时间】:2017-07-09 19:22:36
【问题描述】:

我有一个类Foo,其中包含vectorBars:

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() 方法,它将Bars 添加到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    

【问题讨论】:

  • 您没有获取函数的指针。另外对于std::function,您必须使用std::bind
  • 顺便说一句,您可能想查看vector::emplace_back()

标签: c++ vector function-pointers std-function


【解决方案1】:

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
}

【讨论】:

  • 谢谢凯文。这正是我需要的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多