在堆栈溢出中已经有一些与此类似的问题,但似乎没有什么可以直接回答我的问题。如果我重新发布,我深表歉意。
我想用这些方法的部分模板特化来重载模板化类的一些方法(带有 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':无法将函数定义与现有声明匹配
谢谢 :)