我知道模板定义应该放在头文件中。这是否意味着模板使用(直接或间接)的所有类的定义也需要放在头文件中?
我有一个模板,它有很多依赖的类,因此必须将它们全部放在头文件中,否则我会得到“错误 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 实际上是 B 类,它是在模板 MethodOne 中定义的类型定义。因此,我必须将 B 类的构造函数以及它使用的所有(很多)函数和类放在头文件中。