【发布时间】:2011-11-10 13:18:48
【问题描述】:
我有一个程序,我需要在其中创建一个在 dll 和一些应用程序代码之间共享的基类。然后我有两个不同的派生类,一个在 dll 中,一个在主应用程序中。它们中的每一个都有一些静态成员函数,它们对 nase 类中的数据进行操作。 (它们需要是静态的,因为在其他地方用作函数指针)。我的问题最简单的形式如下所示。
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};
我的编译器抱怨我无法访问 pBase 的受保护成员,即使 Derived 具有对 Base 的受保护访问。有什么办法可以解决这个问题还是我误解了什么? 我可以公开 Base 变量,但这会很糟糕,因为在我的真实实例中,这些是分配的内存块和用于保护它以进行多线程处理的信号量。
帮助?
【问题讨论】:
-
Accessing parent's protected variables 的可能重复项。这与函数是否为
static无关,而是因为访问基成员的参数不是Derived类型。 -
静态函数的参数必须是基类的,以符合函数指针的调用要求。也许我可以使用动态演员来解决这个问题
-
如果您可以控制仅使用指向
Base对象的指针调用该函数,这些对象是Derived对象的基类子对象,您可以使用static_cast从Base*转换到函数体中的Derived*。否则,您必须是Base的friend,或者您可以将var更改为公开。如果你不能做任何这些,那么你就被困住了。
标签: c++ static derived access-specifier