C ++:使用类型安全区分oftwo int参数的类型
-
10-10-2019 - |
题
我有两个INT参数的各种功能(我自己编写函数和调用代码)。我害怕在某些电话中混淆论点的顺序。
如果我调用错误的参数序列(所有参数is int),我该如何使用类型安全警告我或错误我?
我尝试了Typedefs:Typedef不会触发任何编译器警告或错误:
typedef int X; typedef int Y;
void foo(X,Y);
X x; Y y;
foo(y,x); // compiled without warning)
解决方案
您将必须创建包装纸类。可以说,您有两个不同的单元(例如秒和分钟),这两个单元都表示为ints。您将需要以下类似的内容才能完全typesafe:
class Minute
{
public:
explicit Minute(int m) : myMinute(m) {}
operator int () const { return myMinute; }
private:
int myMinute;
};
和类似的几秒钟。显式构造函数可防止您意外使用 int
作为一个 Minute
, ,但是转换操作员允许您使用 Minute
您需要的任何地方 int
.
其他提示
typedef
创建类型的别名。正如您发现的那样,那里没有类型的安全性。
根据您要实现的目标,一种可能性是使用 enum
. 。这也不是完全典型的保护,但更接近。例如,如果不施放它,您就不能将INT传递给枚举参数。
获取一张邮寄笔记。用大写字母写上它,“ x首先!然后是!”将其粘在您的计算机屏幕上。老实说,我不知道还有什么建议。当问题可以用邮政和魔术标记解决问题时,使用包装器类肯定是过大的杀伤力。
不隶属于 StackOverflow