我正在编写一个数学库。我使用C ++模板来完成它。
有两种代码。一个可以吗?但另一个是坏事?为什么呢?
错误日志:
../ test_vector / main.cpp:98:10:错误:重载'operator *'必须至少有一个类或枚举类型的参数 内联T运算符*(float s,const T& t)
#include <cmath>
namespace gqm
{
template <typename T>
struct vector2 {
vector2() {}
vector2(T x, T y) : x(x), y(y) {}
vector2 operator*(float s) const
{
return vector2(x * s, y * s);
}
T x;
T y;
};
//it works good!
template <typename T>
inline T operator*(float s,const T &t)
{
return t.operator*(s);
}
//it do not works!Why?
//template <typename T>
//inline T operator*(float s,const T &t)
//{
// return t*s;
//}
typedef vector2<float> vec2;
}//namespace gqm
int main()
{
gqm::vec2 v2 = 0.5 * gqm::vec2(1.0,1.0);
return 0;
}
答案 0 :(得分:1)
您不能重载此运算符,因为两者都具有相同的参数并返回相同的类型。 如果你评论第一个,第二个也可以。