私はこれを書きたいと思います:
template<typename T1, typename T2>
class OK
{
T1 t1;
T2 t2;
public:
template<typename TX> const TX & GetRef() const;
};
template<typename T1,typename T2>
template<>
const T1 & OK<T1,T2>::GetRef<T1>() const { return t1; }
template<typename T1,typename T2>
template<>
const T2 & OK<T1,T2>::GetRef<T2>() const { return t2; }
どの VS10 がコンパイルに失敗しますか。
テンプレートの特殊化に関する私の理解を確認するために、これを試してコンパイルしました。
typedef int T1;
typedef char T2;
class OK
{
T1 t1;
T2 t2;
public:
template<typename TX> const TX & GetRef() const;
};
template<>
const T1 & OK::GetRef<T1>() const { return t1; }
template<>
const T2 & OK::GetRef<T2>() const { return t2; }
私は何が欠けていますか?私がやりたいことは可能ですか?
編集:すべてのフィールドに getter が必要で、すべてが呼び出されるGetRef()
ので、ユーザーは次のように書くことができます:
OK<float,double> ok;
float a = ok.GetRef<float>();
double b = ok.GetRef<double>();