【发布时间】:2023-03-20 20:28:02
【问题描述】:
在挖掘 STL 源代码(DinkumWare、SGI、STLport 等)并试图理解它们的实现选择(进展顺利)时,我发现了一些我觉得有点奇怪或者我从未运行过的东西进入之前。
通常,当希望在派生类中重载成员函数时,您会在基类成员函数签名前加上 virtual 关键字,但在 STL 源代码中的不同点,情况并非如此。
这是我在 STL 实现中看到的精简版:
template <typename T> class A {
public:
void func( ) { std::cout << "inside A func( )" << std::endl; }
};
template <typename T> class B : public A<T> {
public:
void func( ) { std::cout << "inside B func( )" << std::endl; }
};
编译器似乎对这种伪多态性很好,正如我所期望的那样,会出现以下错误:
error C2535: 'void B<T>::func(void)': member function already defined or declared
有人能解释一下这里发生了什么吗?
PS:这似乎也可以在没有模板的类的情况下工作。
'问候
【问题讨论】:
标签: c++ inheritance stl polymorphism metaprogramming