特定模板特化的重载成员函数

tru*_*ru7 5 c++ templates specialization

我有一个类tPoint,可以实现具有不同的基类型

template<typename T>class tPoint{
   T x;
   T y;
public:
   void Set(T ix, T iy){x=ix;y=iy;}
};
Run Code Online (Sandbox Code Playgroud)

当类型T是int时tPoint<int>,我想要一个特殊的Set(float,float),所以我可以在赋值之前舍入值.

我认为,通过专业化,我可以:

template<> void tPoint<int>::Set(float ix,float iy){x=ix+.5; y=iy+.5;}
Run Code Online (Sandbox Code Playgroud)

这样编译器就会抱怨类定义中没有匹配的函数.

但是如果我在类Set(float,float)中声明它然后它已经定义了(当它为T = float编译时)

我希望我明确表示,对此采取干净的做法或者我做错了什么?谢谢!

Kar*_*ldt 5

你需要专门化这个类,如下所示:

template<> class tPoint<int>{
   int x;
   int y;
public:
   void Set(int ix, int iy){x=ix;y=iy;}
   void Set(float ix, float iy){x = ix+0.5; y = iy+0.5;}
};
Run Code Online (Sandbox Code Playgroud)