我有两个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首先!然后是!”将其粘在您的计算机屏幕上。老实说,我不知道还有什么建议。当问题可以用邮政和魔术标记解决问题时,使用包装器类肯定是过大的杀伤力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top