私は抽象クラスPrimitive
を持っています。抽象クラスにはいくつかの純粋な抽象関数があります。抽象基本クラスのテンプレートインスタンス化を作成するにはどうすればよいですか?
それから私は、テンプレートとツリーの実装を持っている:
このコードでPrimitiveTree<Primitive> *ptree;
として別のファイルに使用されている
template<typename PrimitiveT>
class PrimitiveTree {
...
}
// explicit instantiation
template class PrimitiveTree<Project::Primitive>; // abstract
template class PrimitiveTree<SimpleTrianglePrimitive>; // implementation
私はerror C2259: 'Project::Primitive': cannot instantiate abstract class
を取得します。抽象クラスのインスタンスを削除すると、PrimitiveTree<Primitive>
の対応するシンボルがオブジェクトファイル内に見つからないというリンカエラーが発生します。
Primitive
をテンプレート引数として使用すると、ヘッダーファイル内のメソッドと同様のクラスにはこれらの問題はありません。
テンプレート引数が抽象クラスであっても、必要なシンボルがオブジェクトファイルに追加されるように、テンプレートクラスをインスタンス化する必要はありますか?
一般に、動的多型をテンプレートと組み合わせることは悪い考えです。考え直してください。 – KonstantinL
[MVCE](https://stackoverflow.com/help/mcve)を入力してください。テンプレートパラメータ 'PrimitiveT'が(プリミティブ化された)クラステンプレート' PrimitiveTree'によってどのように使われているかははっきりしていません。 – Walter
@Walter [mcve] –