Я не могу специализировать некоторые методы в своем классе шаблонов 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
следующим образом:
он должен возвращать float
, если тип шаблона int
(vec2<int>
)
он должен возвращать float
, если тип шаблона float
(vec2<float>
)
он должен возвращать double
, если тип шаблона double
(vec2<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. И это прекрасно работает, но может возвращать только тот же тип шаблона, он не может возвращать float length
вместо vec2<int>
. Есть ли способ сделать это?