Hug*_*ugh 4 c++ templates partial-specialization template-specialization
我有一个模板功能(为简化起见,我们称之为"添加")
template<typename T>
inline T add(const T a, const T b)
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
我可以将它专门用于某些类型,但我想做的是将它专门用于模板类型.
就我而言,我的模板类型被调用Vec2<T>.它是一个二维三角矢量(如x和y,而不是c ++矢量!)
我想做的是将我的add函数专门用于通用情况Vec2<T>,而不是专门针对Vec2可能使用的每种类型.
Vec2<T>来自的库具有V2d(double),V2f(float)和V2i(int)的typedef .
我可以使用以下内容专门针对每个方面:
template<>
inline V2f add<V2f>(const V2f a, const V2f b)
{
return V2f(a.x + b.x, a.y + b.y);
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够做到的,这就是我发现自己陷入困境的地方,如:
template<typename S>
inline Vec2<S> add<Vec2<S> >(const Vec2<S> a, const Vec2<S> b)
{
return Vec2<S>(a.x + b.x, a.y + b.y);
}
Run Code Online (Sandbox Code Playgroud)
我觉得必须有这样做的方法,但我很难找到合适的语法.
功能模板不允许使用部分模板专用(它仅适用于类模板).您可以使用函数模板重载:
template<typename S>
inline Vec2<S> add(const Vec2<S>& a, const Vec2<S>& b)
{
return Vec2<S>(a.x + b.x, a.y + b.y);
}
Run Code Online (Sandbox Code Playgroud)
当您add使用Vec2as参数的所有实例调用时,它将被选中.
最好将参数更改为pass-by-const-reference以避免复制.