使用 MSVC 2010,我得到以下行为:
template <class T> class Boogy
{
public:
void Fn( T in )
{
}
void Fn2( const T& in)
{
}
};
template <> void Boogy<int>::Fn( int in ) //builds ok
{
}
template <> void Boogy<int*>::Fn( int* in ) //builds ok
{
}
template <> void Boogy<int>::Fn2( const int& in ) //builds ok
{
}
template <> void Boogy<int*>::Fn2( const int*& in ) //DOES NOT BUILD
{
}
typedef int* intStar;
template <> void Boogy<intStar>::Fn2( const intStar& in ) //builds ok
{
}
显然,我想出了一个“黑客”来解决我的问题,但为什么黑客是必要的?我们应该这样做吗?我所在的代码库有几十个实例,其中模板类有一些成员函数的一些特化——而不是整个类。一位同事坚持认为这是不允许的。
TIA。