参考会员功能?

时间:2011-08-30 15:09:39

标签: c++ function-pointers

我最近发现C ++中有一个引用功能概念:)。 因此,存在指向函数的指针和指向成员函数的不同类型。问题出现了。是否有“参考成员功能”的概念?

我尝试编译以下代码,但GCC 3.4.6给出了错误。

#include <iostream>

using namespace std;

class A {
public:
  virtual void Af() const {
    cout << "A::Af()" << endl;
  }
};

int main() {
  typedef void (A::& MemFnc)() const;
  MemFnc mf = &A::Af;

  A a;
  (a.*mf)();

  return 0;
}

3 个答案:

答案 0 :(得分:21)

在C ++中没有名为的成员引用。

语言规范在说明(§8.3.3/ 3 - 2003)中明确指出

  

指向成员的指针不得指向类(9.4)的静态成员,具有引用类型的成员或“cv void”。[注意:另请参阅5.3和5.5。 “指向成员的指针”类型与“指针”类型不同,也就是说,指向成员的指针仅由指向成员声明符语法的指针声明,而不是由指针声明符语法声明。 C ++中没有“引用成员”类型。

答案 1 :(得分:1)

没有成员函数的引用。

答案 2 :(得分:1)

不,不可能引用成员函数。

在某种意义上,取消引用指向成员函数的指针的结果可以作为一个结果,但是你可以对该结果执行唯一的事情就是调用一个函数调用操作符,per 5.5[expr.mptr.oper]/6。不允许任何其他事情。