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; }
};
コンパイラは、私は線に沿って、エラー何かを期待していたとして、この疑似多形、と罰金ですof:
error C2535: 'void B<T>::func(void)': member function already defined or declared
誰かがここで何が起こっているのか説明するのに十分親切でしょうか?
PS:これもテンプレートがクラスなしで動作するようです。
は「
ああ、ありがとう、あなたは毎日何か新しいことを学びます!今それは理にかなっていると言います。 – rtlayzell