指针成员的向量函数c ++

时间:2013-06-26 08:32:59

标签: c++ pointers vector

我有以下代码:

        typedef bool (A::*rule)(shared_ptr<Node >, shared_ptr<Node> )  ;

在初始化A类对象时,我运行以下代码

        v_ = vector<rule>();
        v_.push_back(A::memberFunction);

我也试过v_.push_back(&amp; A :: memberFunction),因为这对我来说似乎更合乎逻辑,但是 在论坛上反对。我也收到错误消息

这是关于此事的许多主题的建议。但是,我收到以下错误

       non-const lvalue reference to type 'value_type' (aka 'bool (boost::shared_ptr<Node>, boost::shared_ptr<Node>)')
  cannot bind to a temporary of type '<bound member function type>'

有谁知道我哪里出错了?

2 个答案:

答案 0 :(得分:1)

  

我也试过v_.push_back(&amp; A :: memberFunction),因为这对我来说似乎更合乎逻辑,但在论坛上被建议反对。

我不知道那些论坛是什么。形成指向成员的指针有一个有效的语法,它是& classname::membername。所有要素都是强制性的。

如果问题仍然存在,请始终如一地使用该版本并发布该版本的代码和错误消息。

答案 1 :(得分:1)

此代码在llvm / clang 4.2下编译(正如@ balog-pal所说,&classname::membername之前是强制性的:

#include <memory>
#include <vector>

struct Node {};
struct A
{
    bool rule(std::shared_ptr<Node>, std::shared_ptr<Node>)
        {return true;}
};

typedef bool (A::*rule)(std::shared_ptr<Node>, std::shared_ptr<Node> );

int main(int, const char**)
{
    std::vector<rule> v;
    v.push_back(&A::rule);
    return 0;
}

请发布一个完整的非编译示例,您的问题必须隐藏在其他地方。