3

我来自 c# 的世界,正在做这样的事情是允许的。当我在 c++ 中尝试它时,我没有得到任何编译器错误,但我不相信它确实有效。

因此,对于更有经验的人,您是否可以这样做:

Entity->SetPosition(Vector2(200, 400));

因为在 Vector2 中是一个类,设置位置的参数需要一个向量?这是允许的还是我需要像这样预初始化变量:

Vector2 aVector(200, 400);
Entity->SetPosition(aVector);

谢谢大卫

4

2 回答 2

8
Entity->SetPosition(Vector2(200, 400));

如果您定义为以下之一,则很好(并且更可取) :SetPosition

void SetPosition(Vector2 const & v); //Okay : const reference
void SetPosition(Vector2  v);        //okay : value

也就是说,SetPosition接受参数作为const 参考,或者简单地作为

这虽然行不​​通:

void SetPosition(Vector2 & v);  //not okay : non-const reference

--

在 C++11 中,您可以只写这个(前提是您已经实现Vector2启用此行为

Entity->SetPosition({200, 400});

感谢@Simon 指出这一点。

于 2012-07-12T06:53:33.827 回答
1

一般来说,是的,这很好。通常,C++ 中的 Set 样式 API 将采用一个值或 aconst &来设置正在设置的值。在这两种情况下,都可以使用内联表达式。

class Entity { 
public:
  void SetPosition(const Vector2& value) { ... }
  void SetPosition(Vector2 value) { ... } 
};

SetPosition尽管在仅作为参考的情况下,这是不合法的

void SetPosition(Vector2& value) { ... }

虽然这不是二传手的常用习语

于 2012-07-12T06:54:25.687 回答