返回类型“指向成员的指针”的语法是什么?
struct Point {
int x;
int y;
int z;
};
// compiles
decltype(&Point::x) getX () {
return &Point::x;
}
// does not compile... how to do this without decltype?
int (Point::*) getX () {
return &Point::x;
}
// Use case:
Point p, q;
auto pm = getX();
p.*pm = 1; // p.x = 1
q.*pm = 2; // q.x = 2
答案 0 :(得分:7)
你不需要括号:
int Point::* getX () {
return &Point::x;
}
想象一下使用带有常规指针的括号:
int (*) getX() // compiler says WTF
{
static int x;
return &x;
}
答案 1 :(得分:5)
删除多余的括号并将类型更改为int
:
int Point::* getX () {
return &Point::x;
}
答案 2 :(得分:3)
声明语法(大约)遵循用法语法。
要使用getX
,您需要写p.*getX()
(其中p
是Point
),这会产生int
。所以宣言是:
int Point::*getX()