链接具有不同参数类型的重载运算符

时间:2018-10-07 08:09:39

标签: c++11 overloading operator-keyword initializer-list chaining

比方说,我有一个“ Vector”类(不是算术容器),并且我想重载运算符,以便可以进行链式计算。

对我来说很好:

#reset 64

并且我可以做类似的事情

friend Vector operator+(const Vector<N, Type>& a, const Vector<N, Type>& b)
friend Vector operator+(      Vector<N, Type>& a, const Vector<N, Type>& b)

但是我也实现了一个初始化列表

auto a = vec<3>(.0f, .0f, .0f);
auto b = a + a + a;

这使我有可能写这样的东西:

Vector& operator=(Type const (&arr)[N])

但是我不能做的就是链接那些初始化列表。

a = { .1f, .1f, .1f };
a += { .1f, .1f, .1f };

我已经尝试添加运算符重载,例如

a = { .1f, .1f, .1f } + b;
a = { .1f, .1f, .1f } + { .1f, .1f, .1f };

但这不起作用...

这可能吗?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的(不适用于这种用法)。

表达式{ .1f, .1f, .1f } + { .1f, .1f, .1f };不是Vector,并且您为Vector定义的任何重载都不会影响它。

我最好的建议是添加一个零项,它是一个向量:

Vector zero_vec = { 0, 0, 0 }; a = zero_vec + { .1f, .1f, .1f } + { .1f, .1f, .1f };

它依赖于operator+是左关联的事实。