方法指针分配

时间:2014-07-20 14:44:12

标签: c++ methods

我使用g ++并且我无法编译后续代码,尽管如http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

中所述进行了编写

我还使用了开关-std = c ++ 11

struct X{
    int a;
    int sz(){return 17;}
};

typedef int X::*methodPointer1();


methodPointer1 p1=X::&sz;

错误是:"错误:'&'标记之前的预期不合格ID"

任何提示?

2 个答案:

答案 0 :(得分:1)

实现我认为你想要实现的目标的一种更清洁的方法是:

#include <functional>

struct X {
    int a;
    int sz() { return 17; }
};

using methodPointer1 = std::function<int ()>;

X obj;
methodPointer1 func = std::bind(&X::sz, &obj);
func();

您还可以使用placeholders

获取使用参数的成员函数
struct X {
    int a;
    void set_a(int v) { a = v; }
};

X obj;
std::function<void (int)> func = std::bind(&X::set_a, &obj, std::placeholders::_1);
func(10);

答案 1 :(得分:0)

如0x499602D2和Brandon所述,您的代码中存在两个不同的问题。

{{1}指向成员的指针的正确语法包括括号(就像指向函数的指针一样):

typedef

要将指针指向正确的成员,请使用以下语法:

typedef int (X::*methodPointer1)();

此处指向成员的语法非常直观(methodPointer1 p1=&X::sz; 是成员函数的名称,因此X::sz是其地址)。