我想编写一个包含 X 和 Y 值的 2d(数学)向量类。我希望它对 + 等运算符具有重载,因此我可以轻松地使用它在我的代码中表达数学公式。考虑一下:
template <class T>
struct Vector
{
T x, y;
inline Vector<T> operator +(const Vector& other) const
{
return {x + other.x, y + other.y};
}
};
如您所见,我利用了 C++11 在返回语句中使用初始化列表的能力。但是,它们仍然不是表达式——我不能对它们应用操作。我的问题来了。我希望课程是 POD。我无法定义自定义构造函数,以便可以通过参数初始化 x 和 y。这很好,因为我可以使用初始化列表进行构造,例如:
Vector<int> foo = {1, 2};
但是,当我需要在表达式中构造另一个 Vector 时,我不能使用它(运算符 * 未定义,但在这里无关紧要):
Vector<int> result = (foo + {1, 2}) * 12;
正如我之前所说,构造函数替代方案不是一种选择。我很想听听对此的任何意见,因为除了将 {1, 2} 存储在命名变量中之外,我想不出任何解决此问题的方法。