获取指向基类受保护成员函数的函数指针

Posted

技术标签:

【中文标题】获取指向基类受保护成员函数的函数指针【英文标题】:getting function pointer to protected member function of base class 【发布时间】:2014-04-08 13:43:42 【问题描述】:

我有一个类公开基类的受保护成员函数。有没有办法获得指向暴露函数的函数指针?

class B

protected:
  void foo() 
;

class D : protected B

public:
  using B::foo;
;


void(D::*test)() = &D::foo; // error C2248: 'B::foo' : cannot access protected member declared in class 'D'

【问题讨论】:

【参考方案1】:

有点尴尬,但是如果你不能改变原来的类,你可以做一个派生类给你访问权限:

struct E : D 
  static void (D::*fooPtr())()  return &D::foo; 
;

void(D::*test)() = E::fooPtr();

【讨论】:

【参考方案2】:

以某种方式存在;

void foo_exposed()  foo();  // in 'D'

但它有一个新名字..

【讨论】:

不必:void foo() B::foo(); 。这确实是一个解决方案,但我不想更改我的原始代码。

以上是关于获取指向基类受保护成员函数的函数指针的主要内容,如果未能解决你的问题,请参考以下文章

基类的函数指针指向子类的成员函数?

指向基类中成员函数的指针数组

指向基类错误成员函数的指针[关闭]

为啥指向基类的派生类指针可以调用派生类成员函数? [复制]

在 C++ 中将指向基类的指针传递给派生类的成员函数

为啥我可以通过指向派生对象的基类指针访问派生私有成员函数?