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