0

我有一个基类Base和一些子类BaseDerivate1...... BaseDerivateN我的部分代码是通用的,并通过 define 访问使用的类来支持任何子类BASE_DERIVATE

我现在需要添加一个静态函数,子类可以声明但不必声明。对于声明的派生类StaticFunc(),我想调用它。在所有其他情况下,我想调用回退函数Base::StaticFunc()。调用如下所示:

#define BASE_DERIVATE BaseDerivate1 // or some other child class

// somewhere else:
BASE_DERIVATE::StaticFunc();

所以我故意在这里使用名称隐藏。StaticFunc永远不会从类中调用。我的问题是:C++ 标准是否支持这一点,或者这会导致某些编译器出现编译器错误。另外:有没有更好的方法来做“静态继承”?然而,我坚持定义BASE_DERIVATE概念。

4

1 回答 1

0

这将“正常工作”:

#include <iostream>

class Base { 
    public: static void foo() { std::cout << "Base::foo()\n"; }
};

class Derived1 : public Base { };
class Derived2 : public Base { 
    public: static void foo() { std::cout << "Derived2::foo()\n"; }
};

int main() {
    Derived1::foo(); // prints "Base::foo()"
    Derived2::foo(); // prints "Derived2::foo()"
}

这是使用常规名称阴影,它对静态成员的工作方式相同。Base静态实现仍然可以通过Derived2相当有趣的语法获得:

Derived2::Base::foo();
于 2018-10-04T10:25:44.290 回答