创建自定义类型或使用内置类型
Creating custom or using built in types
在一些项目中,人们为所有东西创建自定义类型,而在其他项目中,他们只是使用int和float来表示温度,长度和角度。
我可以看到两者的优点和缺点,我想这取决于你所从事的项目类型,是否创建这类类型是一个好主意。
我是这么想的:
class SomeClass
{
Physics::Temperature TemperatureOnMoon(Geometry::Distance distanceFromSun);
Geometry::Area Shadow(Geometry::Angle xAngle, Geometry::Angle yAngle, Geometry::Triangle triangle);
};
Temperature类型将有一个Fahrenheit()和Celsius()方法,Area类型将有一个接受两个Point类型的构造函数,等等。
这提供了很好的类型安全性,我认为它增加了可读性,但它也产生了很多依赖。突然间,每个使用SomeClass的人都必须包含所有这些其他的头文件,所以你必须在创建单元测试时做更多的工作。培养所有的类型也需要时间。
使用内置类型的方法使用起来更简单,依赖也更少:
class SomeClass
{
double TemperatureOnMoon(double distanceFromSun);
double Shadow(double xAngle, double yAngle, double triangle);
};
我的问题是,你在多大程度上创造了这些类型?你更喜欢在大型项目中使用它们吗?有没有现成的库来存放这类东西?
我会避免创建不必要的新类型。以下是你必须处理的一些问题:
- 它隐藏了关于精度的信息——就像在距离的情况下,距离可以是什么?是整型,是浮点型还是双精度型?
-
您将在使用标准库时遇到问题-例如,您可以使用max(distance1, distance2)吗?排序距离呢?您必须显式地创建一个比较函数。这也取决于你如何定义你的类型。如果它是基本类型的类型定义,则可能不需要创建新的比较函数或max函数。但它仍然会令人困惑。但是,如果您的Distance现在是一个类或结构,那么您将不得不显式重载所有操作符,+ - = *.....
-
因为你不知道它是浮点类型还是整数,所以你不知道是否可以安全地使用==来比较两个距离。它们可以是浮点数,如果操作不同,由于精度问题,它们最终可能会得到与理论上不同的结果。
- 要维护的文件数量将更大,构建过程将不必要地更长。
如果它们作为基本类型根本没有意义,并且您确实想重载所有操作符或不允许某些操作符,那么我会创建新类型。我正在努力寻找一个很好的例子,但一个例子可以是"一个二进制数",所以如果你定义一个BinaryNumber作为一个类/结构体,而不是使用它作为一个整数,这将是有意义的,因为如果你有一个int binaryNumber1=1, binaryNumber2=1;在这个过程中你用binaryNumber1+binaryNumber2你会期望结果是10而不是2,对吧?因此,您可以定义一个BinaryNumber类/结构体并重载操作符+ - */等。
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 何时包含内置类型和运算符的标头?
- 基本类型与内置类型有什么区别C++
- 指内置类型的文字
- 如何在编译器时动态获取元组内的变量类型C++?
- 使用 SFINAE 和 void_t 来确定容器内的元素类型
- 更改if范围内变量的类型
- 在C 中重新解析命名空间内的全局类型
- Q : std::同一数组内具有不同类型的函数
- 如何使用内置返回类型重载运算符?
- const_cast是否返回在角括号内指定的类型
- C和c++中内置数据类型的类型是什么?
- 内置数据类型转换为用户定义的数据类型c++
- 将内置数据类型转换为std::string: memcpy vs snprintf
- 函数模板内的解除类型和范围解析操作符
- 内置数据类型与C++中用户定义的数据类型
- 如何用内部类的类型初始化模板类中的静态字段
- int(内置数据类型)是c++中的一个类吗
- 是否有可能像处理内置数据类型那样处理class_inst = some_func(class_inst) ?
- 内联stl类型列表管理器