gpt4 book ai didi

C++ 等价于代数数据类型?

转载 作者:IT老高 更新时间:2023-10-28 23:13:38 24 4
gpt4 key购买 nike

假设我有这个 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++ 中可以使用不同的方法来解决该问题。

纯 OO 方法您将定义一个接口(interface) Shape 并具有两个不同的选项作为实现该接口(interface)的派生类型。然后 RigidBody 将包含一个指向 Shape 的指针,该指针将被设置为引用 BallConvexPolygon。亲:人们喜欢 OO(不确定这是否真的是亲 :)),它很容易扩展(您可以稍后添加更多形状而无需更改类型)。缺点:你应该为Shape定义一个合适的接口(interface),它需要动态分配内存。

抛开 OO 不谈,您可以使用 boost::variant 或类似的类型,这基本上是一个标记 union ,可以容纳其中一种类型。优点:没有动态分配,形状是对象本地的。缺点:不是纯 OO(人们喜欢 OO,你记得对吗?),不太容易扩展,不能一般地使用形状

关于C++ 等价于代数数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com