比方说,我有一个“ 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 };
但这不起作用...
这可能吗?
答案 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+
是左关联的事实。