我有两个int参数的各种函数(我自己编写函数和调用代码)。我害怕在一些电话中混淆论证的顺序。
如果我调用一个参数序列错误的函数(所有参数都是int),我如何使用类型安全来让编译器发出警告或错误?
我尝试过typedef:Typedef不会触发任何编译器警告或错误:
typedef int X; typedef int Y;
void foo(X,Y);
X x; Y y;
foo(y,x); // compiled without warning)
答案 0 :(得分:12)
您必须创建包装类。假设您有两个不同的单位(比如秒和分钟),两者都表示为整数。你需要类似下面的东西才能完全类型化:
class Minute
{
public:
explicit Minute(int m) : myMinute(m) {}
operator int () const { return myMinute; }
private:
int myMinute;
};
和类似的类秒。显式构造函数可以防止您意外地将int
用作Minute
,但转换运算符允许您在需要Minute
的任何位置使用int
。
答案 1 :(得分:4)
typedef
创建类型别名。正如您所发现的,那里没有类型安全。
根据您要实现的目标,一种可能性是使用enum
。这也不是完全类型安全的,但它更接近。例如,如果不将其转换为枚举参数,则无法将int传递给它。
答案 2 :(得分:-5)
获取便利贴。用大字写上“X先!然后!”将它贴在电脑屏幕上。老实说,我不知道还有什么建议。当问题可以用post-it和魔术标记来解决时,使用包装类肯定是矫枉过正的。