我可以从派生类中的静态函数访问基类受保护的成员吗?

Dav*_*ape 19 c++ static derived access-specifier

我有一个程序,我需要在dll和一些应用程序代码之间共享一个基类.然后我有两个不同的派生类,一个在主应用程序的dll中.其中每个都有一些静态成员函数,它们对nase类中的数据进行操作.(它们需要是静态的,因为在其他地方用作函数指针).最简单的形式我的问题如下所示.

class Base {
protected:
  int var ;
};

class Derived : public Base {
  static bool Process( Base *pBase ) {
    pBase->var = 2;
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

我的编译器抱怨我无法访问pBase的受保护成员,即使Derived已经保护对Base的访问权限.有什么方法可以解决这个问题,还是我误解了什么?我可以将Base变量公开,但这会很糟糕,因为在我的实例中,这些是分配的内存块和信号量来保护它以进行多线程处理.

救命?

Jam*_*nze 13

通常(无论函数是否为静态),派生类的成员函数只能访问其类型对象的受保护基类成员.如果静态类型不是派生类(或从派生类派生的类)的静态类型,则它无法访问基类的受保护成员.所以:

class Base {
protected:
    int var;
 } ;

class Derived : public Base {
    static void f1( Derived* pDerived )
    {
        pDerived->var = 2; // legal, access through Derived...
    }
    static bool Process( Base *pBase )
    {
        pBase->var = 2 ;  // illegal, access not through Derived...
    }
} ;
Run Code Online (Sandbox Code Playgroud)