これに似た質問がすでにスタックオーバーフローにいくつかありますが、私が持っている質問に直接答えているように見えるものは何もありません。転載の場合はご容赦ください。
テンプレート化されたクラス (2 つのテンプレート パラメーターを持つ) のいくつかのメソッドを、それらのメソッドの部分的なテンプレート特殊化でオーバーロードしたいと思います。正しい構文を理解できず、不可能だと考え始めています。ここに投稿して、確認できるかどうかを確認したいと思いました。
従うコード例:
template <typename T, typename U>
class Test
{
public:
void Set( T t, U u );
T m_T;
U m_U;
};
// Fully templated method that should be used most of the time
template <typename T, typename U>
inline void Test<T,U>::Set( T t, U u )
{
m_T=t;
m_U=u;
}
// Partial specialisation that should only be used when U is a float.
// This generates compile errors
template <typename T>
inline void Test<T,float>::Set( T t, float u )
{
m_T=t;
m_U=u+0.5f;
}
int _tmain(int argc, _TCHAR* argv[])
{
Test<int, int> testOne;
int a = 1;
testOne.Set( a, a );
Test<int, float> testTwo;
float f = 1.f;
testTwo.Set( a, f );
}
クラス全体の部分的な特殊化を書くことができることは知っていますが、それはちょっとひどいです。このようなことは可能ですか?
(私はVS2008を使用しています)編集:これはコンパイルエラーエラーですC2244: 'Test::Set':関数定義を既存の宣言に一致させることができません
ありがとう :)