0

テンプレート定義をヘッダー ファイルに配置する必要があることを理解しています。これは、テンプレートが (直接的または間接的に) 使用するクラスのすべての定義もヘッダー ファイルに配置する必要があるということですか?

依存する多くのクラスを持つテンプレートがあるため、それらをすべてヘッダー ファイルに配置する必要があります。そうしないと、「エラー 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 のコンストラクターと、それが使用するすべての (多くの) 関数とクラスをヘッダー ファイルに配置する必要があります。

4

2 に答える 2