我有一个暴露基类的受保护成员函数的类。有没有办法获得一个指向暴露函数的函数指针?
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'
答案 0 :(得分:2)
这有点尴尬,但是如果你不能改变原来的类,你可以创建一个派生类来给你访问:
struct E : D {
static void (D::*fooPtr())() { return &D::foo; }
};
void(D::*test)() = E::fooPtr();
答案 1 :(得分:0)
以某种方式存在;
void foo_exposed() { foo(); } // in 'D'
但它得到了一个新名字..