我在模板专业化方面遇到问题,因为我不想重新定义方法,我想使用通用方法。
template<class VarsContainer, class Specific>
class State
{
public:
State();
~State(){}
HSError_t Update(LoggerData const &lData);
VarsContainer state;
void swap(State &rhs);
State & operator=(State rhs); // pass by value copy
protected:
void UpdateSpecific(Specific *rhs);
Specific specificPtr;
};
在实现中,我执行以下操作:
template<class VarsContainer, class Specific>
HSError_t State<VarsContainer, Specific>::Update(LoggerData const &lData)
{
HSError_t error_t = HeatInterfaceError;
specificPtr = const_cast<Specific>(&lData);
error_t = UpdateSpecific(specificPtr);
if(error_t != HeatSuccess)
{
return error_t;
}
return error_t;
}
template<class VarsContainer, class Specific>
HSError_t State<VarsContainer, Specific>::UpdateSpecific(Specific *rhs)
{
HSError_t error_t = HeatInterfaceError;
return error_t;
}
之后,我以以下方式专门化模板:
template<>
class State<ChemicalVars, Chemicals*>
{
public:
ChemicalVars state;
protected:
HSError_t UpdateSpecific(Chemicals *chemicals);
Chemicals *specificPtr;
};
我在 cpp 文件中定义 UpdateSpecific,将数据从专用结构复制到本地状态。
问题是,当我尝试调用“更新”方法时,编译器没有在我的 ChemicalVars 专用模板中为其创建定义。
之后我改变了我的专业:
template<>
class State<ChemicalVars, Chemicals*>
{
public:
ChemicalVars state;
HSError_t Update(LoggerData const &lData);
protected:
HSError_t UpdateSpecific(Chemicals *chemicals);
Chemicals *specificPtr;
};
但是,错误是一样的:
undefined reference to `State<ChemicalVars, Chemicals*>::Update(LoggerData const&)'
问题是通用实现很好,我只想使用在通用状态中定义的一个供专业化使用。