gpt4 book ai didi

c++ - 创建具有受限属性的类型

转载 作者:行者123 更新时间:2023-11-30 04:47:34 25 4
gpt4 key购买 nike

在某些情况下,需要根据某些属性限制类型的可能值。需要规范化示例 float 或数学 vector 。为这些情况创建类并使用运算符重载在类型之间切换是否是一种好的做法?

例如,有一个 vector2 和 vector2_normalized 类,其中可以更改 vector 长度的 vector2_normalized 运算符(+、-、标量 * 和/、..)返回一个 vector2 实例,其他返回一个 vector2_normalized 实例。然后使用隐式转换在两者之间自动转换。这样,必须归一化的 vector 就可以使用这种类型,并且消除了归一化错误。

最佳答案

你所说的这些“限制”叫做class invariants类是一种构造域对象以限制其有效的方法。这是使用类的主要动机之一。

Arno Lepsik 最近在 CppCon 2018 上就​​这个名为 "Avoiding disasters with strongly typed C++" 的话题发表了精彩演讲

John Lakos 在 CppCon 2015 上也做了精彩的演讲 "Value semantics. It ain't about the syntax"

您的问题的完整答案会很长,所以我希望这个简短的讨论对您有所帮助。

一个很好的例子是 Boost.Units .

如果您曾经处理过科学应用程序的编程,那么您就会知道处理单位是一件很痛苦的事情。

您如何确保数据之间的操作有效?您不想在英尺上增加米,这就是使火箭坠毁的方式。当您的值成为单位的强类型时,在编译时这样的操作变得不可能。

关于c++ - 创建具有受限属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56188791/

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