-1

我有以下代码:

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

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

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

我也尝试过 v_.push_back(&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>'

有谁知道我哪里出错了?

4

2 回答 2

1

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

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

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

于 2013-06-26T08:52:15.610 回答
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;
}

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

于 2013-06-26T10:39:44.117 回答