C ++返回指向成员的指针

时间:2014-07-23 17:37:44

标签: c++

返回类型“指向成员的指针”的语法是什么?

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

3 个答案:

答案 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;
}

Demo, because coliru is down at the moment

答案 2 :(得分:3)

声明语法(大约)遵循用法语法。

要使用getX,您需要写p.*getX()(其中pPoint),这会产生int。所以宣言是:

int Point::*getX()