みんな!
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> with 1> [ 1> でコンパイルされますT=C文字列 1> ]
解き方を教えてください。前もって感謝します!