我有一个程序,需要在其中创建一个在dll和一些应用程序代码之间共享的基类。然后,我有两个不同的派生类,一个在dll中,一个在主应用程序中。它们每个都有一些静态成员函数,这些函数对nase类中的数据起作用。 (它们必须是静态的,就像在其他地方用作函数指针一样)。下面以最简单的形式显示我的问题。

class Base {
protected:
  int var ;
};

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

我的编译器提示说,即使Derived已保护对Base的访问,我也无法访问pBase的 protected 成员。有什么办法解决还是我误会了什么?
我可以将Base变量设为public,但这会很不好,因为在我的实际实例中,这是分配的内存块和为多线程保护它的信号量。

救命?

最佳答案

通常(无论该函数是否是静态的),
派生类的成员函数只能访问 protected 基
其类型的对象的类成员。它无法访问 protected
如果静态类型不是派生类的基类成员
(或从中派生的类)。所以:

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...
    }
} ;

关于c++ - 我可以从派生类中的静态函数访问基类 protected 成员吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7307200/

10-16 08:14