假设我有这个 Haskell 代码:
data RigidBody = RigidBody Vector3 Vector3 Float Shape -- position, velocity, mass and shape
data Shape = Ball Float -- radius
| ConvexPolygon [Triangle]
在 C++ 中表达这一点的最佳方式是什么?
struct Rigid_body {
glm::vec3 position;
glm::vec3 velocity;
float mass;
*???* shape;
};
我要问的是当结构可以是两种类型之一时如何表示结构内部的形状。
在 C++ 中可以使用不同的方法来解决该问题。
定义接口的纯面向对象方法Shape
并具有两个不同的选项作为实现该接口的派生类型。然后RigidBody
将包含一个指向Shape
这将被设置为引用任一Ball
or a ConvexPolygon
。优点:人们喜欢 OO(不确定这是否真的是优点:)),它很容易扩展(您可以稍后添加更多形状而无需更改类型)。缺点:您应该定义一个适当的接口Shape
,它需要动态分配内存。
抛开 OO 不谈,你可以使用boost::variant
或类似的类型,这基本上是一个包含其中一种类型的标记联合。优点:没有动态分配,形状对于对象来说是本地的。缺点:不是纯粹的面向对象(人们喜欢面向对象,你还记得吧?),不那么容易扩展,不能使用形状一般地
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)