每个人!
我有一个名为 UpdateValue 的模板函数,它旨在更新一些具有不同类型的值,例如整数、BOOL、字符串等。请参阅以下代码片段以供参考:
#include <typeinfo.h>
template<class T>
void UpdateValue(T Value)
{
if ( typeid(int) == typeid(Value) )
{
ZOrder(Value);
}
else if ( typeid(bool) == typeid(Value) )
{
BOOL bShow = Value ? TRUE : FALSE;
Show(bShow);
}
else if ( typeid(CString) == typeid(Value) )
{
Theme(Value);
}
}
void Show(BOOL bShow) { m_bShow = bShow; }
void ZOrder(int nZOrder) { m_nZOrder = nZOrder; }
void Theme(CString strTheme) { m_strTheme = strTheme; }
BOOL m_bShow;
int m_nZOrder;
CString m_strTheme;
但是当我使用以下语句调用这种模板函数时
CString strValue = _T("Animal");
UpdateValue<CString>(strValue);
上述代码编译失败,抛出以下异常:
e:\dynaprop\dynaprop\mainfrm.cpp(269) : 错误 C2664: 'CMainFrame::ZOrder' : 无法将参数 1 从 'CString' 转换为 'int' 1> 没有可以执行此操作的用户定义转换运算符转换,否则无法调用运算符 1> e:\dynaprop\dynaprop\mainfrm.cpp(67) :请参阅对函数模板实例化 'void CMainFrame::UpdateValue(T)' 的引用 1> 与 1> [ 1> T=CString 1> ]
你能告诉我如何弄清楚吗?先感谢您!