テンプレート定義をヘッダー ファイルに配置する必要があることを理解しています。これは、テンプレートが (直接的または間接的に) 使用するクラスのすべての定義もヘッダー ファイルに配置する必要があるということですか?
依存する多くのクラスを持つテンプレートがあるため、それらをすべてヘッダー ファイルに配置する必要があります。そうしないと、「エラー LNK2019: 未解決の外部シンボル」が発生します。コード編成に関してより良い解決策はありますか?
例:
double inline MainFunction(double price, const Params& params)
{
Price<ModeEnum::NORMAL> pricer(price);
MethodOne<ModeEnum::NORMAL> methodOne;
return pricer.func(methodOne, params) ;
}
template<ModelEnum::Enum Mode>
struct Price
{
double price;
typedef double return_type;
Price(double price_) : price(price_){}
template<typename T> double func(const T& method, const Params& params) const
{
const typename T::PriceFactor factor(params);
return factor ..... ;
}
};
T::PriceFactor は、実際にはテンプレート MethodOne で定義された型定義であるクラス B です。このため、クラス B のコンストラクターと、それが使用するすべての (多くの) 関数とクラスをヘッダー ファイルに配置する必要があります。