Уже есть несколько вопросов, похожих на этот, о переполнении стека, но ничего, что, казалось бы, напрямую отвечает на мой вопрос. Приношу извинения, если делаю репост.
Я хотел бы перегрузить несколько методов шаблонного класса (с двумя параметрами шаблона) с частичной специализацией шаблона этих методов. Я не смог понять правильный синтаксис и начинаю думать, что это невозможно. Я думал, что опубликую здесь, чтобы узнать, смогу ли я получить подтверждение.
Пример кода для подражания:
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': невозможно сопоставить определение функции с существующим объявлением
Спасибо :)