8

我有各种带有两个 int 参数的函数(我自己编写函数和调用代码)。我害怕在某些调用中混淆参数的顺序。

如果我调用具有错误参数序列的函数(所有参数都是 int),如何使用类型安全让编译器警告我或出错?

我试过 typedefs: Typedef 不会触发任何编译器警告或错误:

typedef int X; typedef int Y; 

void foo(X,Y); 

X x; Y y; 

foo(y,x); // compiled without warning)
4

3 回答 3

12

您将不得不创建包装类。假设您有两个不同的单位(例如秒和分钟),它们都表示为整数。您需要以下内容才能完全类型安全:

class Minute
{
public:
    explicit Minute(int m) : myMinute(m) {}
    operator int () const { return myMinute; }

private:
    int myMinute;
};

和几秒钟的类似课程。显式构造函数可防止您意外将 aint用作 a Minute,但转换运算符允许您在Minute需要 a 的任何地方使用 a int

于 2011-01-12T19:24:15.143 回答
4

typedef创建类型别名。正如您所发现的,那里没有类型安全。

根据您要实现的目标,一种可能性是使用enum. 这也不是完全类型安全的,但更接近。例如,您不能在不强制转换的情况下将 int 传递给枚举参数。

于 2011-01-12T19:21:45.387 回答
-6

获取便利贴。在上面用大写字母写:“X FIRST!然后 Y!” 把它贴在你的电脑屏幕上。老实说,我不知道还有什么建议。当问题可以用便利贴和魔术标记解决时,使用包装类肯定是大材小用。

于 2011-01-12T22:40:26.753 回答