【问题标题】: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'

【问题讨论】:

    标签: c++ derived-class member-function-pointers


    【解决方案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(); }。这确实是一个解决方案,但我不想更改我的原始代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2022-12-01
      • 2017-07-27
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多