名称隐藏对静态函数继承的实例使用
Intional use of name hiding for static function inheritance
我有一个基类Base
和许多子类BaseDerivate1
..BaseDerivateN
.我的部分代码是通用的,并通过定义BASE_DERIVATE
访问使用的类来支持任何子类。
我现在需要添加一个静态函数,子类可以声明但不必声明。对于声明StaticFunc()
的派生类,我想调用它。在所有其他情况下,我想调用回退函数Base::StaticFunc()
。调用如下所示:
#define BASE_DERIVATE BaseDerivate1 // or some other child class
// somewhere else:
BASE_DERIVATE::StaticFunc();
所以我故意在这里使用隐藏的名字。从不从类中调用StaticFunc
。我的问题是:C++标准是否支持这一点,或者这会导致某些编译器的编译器错误。另外:有没有更好的方法来做"静态继承"?然而,我坚持定义BASE_DERIVATE
概念。
这将"正常工作":
#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();
相关文章:
- 名称隐藏对静态函数继承的实例使用
- 您能否实例化模板的非专用版本并在专用化中继承它?
- 在编译时检查未实例化的类模板是否继承自其第一个模板参数
- C++ 实例化新对象时不接受继承方法默认参数值
- 是否应该使用继承来减少内存消耗的实例的内存分配?
- 如何实例化从使用模板的纯虚拟类继承的对象
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 从抽象类继承的类的实例
- 获取继承的实例化模板的类型
- 无法使用多重继承 c++ 实例化抽象类
- 如何在继承级别的多个实例之间共享相同的数据
- 模板实例和继承的转换错误
- 模板类实例化如何与类继承协同工作
- Cython C 类继承无法实例化派生类
- 实例化指针从继承类函数
- 从 C++ 中的错误模板实例继承
- 每个层次结构的单个单一实例继承
- 从模板类的实例继承
- 从驻留在非相邻内存中的实例继承
- 从模板类的实例继承