タイトル参照。テンプレートがあります。テンプレートの特定のインスタンスを強制的にインスタンス化したい。どうすればいいですか?
より具体的には、抽象テンプレート クラスを強制的にインスタンス化できますか?
同じ質問があるので詳しく説明します。私の場合、ライブラリを構築しています。テンプレートの実装の一部は大きく、多くのものを含んでいますが、いくつかのタイプに対してのみ生成されます。それらをライブラリでコンパイルし、すべてのメソッドをエクスポートしたいのですが、どこにでもコードを含むヘッダーを含めたくありません。
すなわち:
template<class T>
OS_EXPORT_DECL class MyTmpl
{
T *item1;
public:
inline T *simpleGetT() { return(item1); } /* small inline code in here */ }
T *doSomeReallyBigMergeStuff(T *b); // note only declaration here
};
// *** implementation source file only seen inside library
template<class T>
MyTmpl<T>::doSomeReallyBigMergeStuff(T *b)
{
... a really big method, but don't want to duplicate it,
so it is a template ...
}
もちろん、ライブラリ内のすべてのメソッドを参照してコンパイルとエクスポートを強制することもできますが、項目の引数の書式設定やそれらを呼び出すコードなどの不要なコードをライブラリに追加することは望ましくありません。
??????? 具体的には、いくつかのバージョンの MSC と GCC および Intel コンパイラ用のライブラリを構築しています。