このコードはテンプレートの特殊
template<class T>
class Base
{
virtual void method() = 0;
};
template<>
void Base<int>::method() { std::cout << "overrided" << std::endl; }
Base<int> base;
をコンパイルして動作するように期待しかし、それは'Base<int>': cannot instantiate abstract class
エラーが発生します。部分的な専門化は、Base<int>
を非抽象化し、それをインスタンス化することを可能にする。
このような短い解決策があり、Base
クラス抽象クラスを保持していますか?そうでなければ私はBase
クラス非抽象を作るか、ここからニコルボーラのソリューションを使用することができます(代わりに一つだけのメンバ関数の)クラス全体の専門性についてTemplate specialization and inheritance
通常の抽象クラスであっても、純粋仮想関数の定義を持つことができます。しかし、それはあまり抽象的ではありません。あなたはまだそれのインスタンスを作成することはできません。 – Arunmu
@Arunmu答えはコメントではなく答えとして表現されますか? –
@AlanStokes私はあなたに同意しますが、私はそのコメントでOPに答えたとは思いません。 – Arunmu