我使用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"
任何提示?
答案 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
是其地址)。