Пока копаясь в источниках STL (DinkumWare, SGI, STLport и т. Д.) И пытаясь понять их варианты реализации (все идет хорошо), я наткнулся на то, что мне кажется немного странным или, скорее, я никогда не запускался в до.
Обычно, когда кто-то желает перегрузить функцию-член в производном классе, вы должны добавить в подпись функции-члена базового класса виртуальное ключевое слово, однако в разных точках источника 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: Это также работает без шаблонов.
Привет