【发布时间】:2015-07-14 09:59:23
【问题描述】:
我无法在我的 vec2 模板类中专门化某些方法。这是我的代码:
#pragma once
template<typename Number>
struct vec2
{
static_assert(std::is_same<Number, int>::value
|| std::is_same<Number, float>::value
|| std::is_same<Number, double>::value,
"Type not allowed. Use <int>, <float> or <double>.");
Number x, y;
vec2();
vec2(Number x, Number y);
void add(const vec2& other);
inline Number lengthSquared() const;
/*Some other general methods like this two*/
}
我的问题是:我想以这种方式专门化我的 length 方法:
如果模板类型是 int (vec2<int>)
,它必须返回 float
如果模板类型为 float (vec2<float>)
,它必须返回 float
如果模板类型是double (vec2<double>),它必须返回double
我以前像这样专门化我的length 方法:
struct vec2
{
/* ... */
inline Number length() const;
}
/*Outside vec2 struct, but in vec2.h*/
template<> inline int vec2<int>::length() const;
template<> inline float vec2<float>::length() const;
template<> inline double vec2<double>::length() const;
然后在我的 .cpp 文件中实现它。这很好用,但它只能返回相同的模板类型,它不能为vec2<int> 返回float length。有没有办法做到这一点?
【问题讨论】:
标签: c++ templates vector specialization