我曾经使用Unity,他们使用一个很酷的系统来添加和增加向量。 这是参考文献(http://docs.unity3d.com/ScriptReference/Transform.html)
的简短摘录foreach (Transform child in transform) {
child.position += Vector3.up * 10.0F;
}
正如您所看到的,即使它们可能具有不同的变量,它们也可以添加和相乘两个向量(结构/类)。现在,当我尝试进行这样的计算时,我必须单独添加2d浮点矢量的x和y。 那么如何添加像
这样的结构struct Vec2f{
float x;
float y;
};
一起写
Vec2f c = a + b;
而不是
c.x = a.x + b.x;
c.y = a.y + b.y;
答案 0 :(得分:3)
编辑:
你需要在结构中重载像'+',' - '等运算符。添加示例:
struct Vec2f
{
float x;
float y;
Vec2f operator+(const Vec2f& other) const
{
Vec2f result;
result.x = x + other.x;
result.y = y + other.y;
return result;
}
};
编辑2: RIJIK发表评论:
我也想知道是否有一些技巧可以使功能不那么重复。我的意思是,如果我现在想要使用运算符,我必须为每个运算符创建一个函数,即使除了使用的运算符之外的函数之间没有很大的区别。你如何实现计算或许多运算符?
因此,您可以做的一件事是在运算符中使用另一个运算符。像你这样的东西可以通过简单地否定第二个数字来改变减法:
a - b变为+( - b)
当然,在结构中首先需要使用否定运算符来执行此操作。示例代码:
struct Vec2f
{
float x;
float y;
Vec2f operator+(const Vec2f& other) const
{
Vec2f result;
result.x = x + other.x;
result.y = y + other.y;
return result;
}
Vec2f operator-() const
{
Vec2f result;
result.x = -x;
result.y = -y;
return result;
}
// we use two operators from above to define this
Vec2f operator-(const Vec2f& other) const
{
return (*this + (-other));
}
};
关于这一点的一个好处是,如果你改变加法例如你不需要改变减法。它会自动更改。
作为对此的回复:
但我不明白为什么我应该让这些功能保持不变。
因为那时你可以将这个函数用于常量变量。例如:
const Vec2f screenSize = { 800.0f, 600.0f };
const Vec2f boxSize = { 100.0f, 200.0f };
const Vec2f sub = screenSize - boxSize;
我在这里也使用花括号初始化,因为你没有定义任何构造函数。