指向静态成员的类

时间:2011-11-06 10:39:24

标签: c++

从这个参考文献:

  

(8.3.3 / 3)指向成员的指针不得指向a的静态成员   class(9.4),具有引用类型的成员,或“ cv void。”

为什么指针不能指向类的静态成员?

struct S {
     static int f() { /*...*/ };

};

int main()
{
     int (S::*s)() = &S::f; // why?
}

3 个答案:

答案 0 :(得分:4)

  

为什么指针不能指向类的静态成员?

因为出于成员资格的目的,不是成员,仅仅是为了范围。除了范围之外,静态成员就像自由函数一样,不附加到类的实例。您可以使用非成员函数指针:

int (*s)() = &S::f;

答案 1 :(得分:1)

每当您执行T::*时,您都会说“此事需要使用T的实例”。该语句不适用于static函数,这些函数可以在没有任何类实例的情况下调用。

答案 2 :(得分:0)

您必须使用常规函数指针,如下所示:

int (*s)()=&S::f;

与GMan一样,静态方法不适用于实例,因此它们不会收到隐藏的this指针。这有效地使它们具有与具有相同参数的实例方法不同的签名。