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

Vector of pointer member functions c++

本文关键字:c++ 成员 函数 指针      更新时间:2023-10-16

我有以下代码:

        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>'

有人知道我哪里错了吗?

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

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

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

此代码在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;
}

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