【发布时间】:2012-03-24 04:27:34
【问题描述】:
我想在我的 C++ 程序中使用 typedef 之类的东西来增强类型安全性。
举个例子,假设我有两个函数
void function1(unsigned idOfType1);
void function2(unsigned idOfType2);
然后我会错误地将 idOfType2 传递给 function1,反之亦然。在这种情况下,我希望编译器给我一个错误。我知道我可以将这些 unsigned 包装在一个结构中,但是我必须提供一个字段名称并使用 . 来访问它们,这有点不方便。有什么好办法吗?
编辑:据我所知,typedef 不能用于此目的,因为它只是类型的简写,不会用于类型检查。
【问题讨论】:
-
枚举在你的情况下工作得很好......
-
@AlexanderPavlov 需要详细说明,这对我来说并不明显......
-
@Paul:您可以编写类似
enum Type1 { dummy0 = 1, dummy1 = 1<<1, dummy2 = 1<<2, ..., dummy31 = 1<<31};的内容,并假设unsigned在您的实现中是32 位类型,那么结果是一个可以保存unsigned的任何值的枚举。那么void function1(Type1 id)不会接受Type2,因为枚举之间不能隐式转换。 -
@SteveJessop:是的,我的意思是类似的方法,但不是使用二的幂的值 - Paul 不会按位计算,是吗?
-
@SteveJessop 我明白了,感谢您的解释。不过,这感觉有点骇人听闻。和两个整数的转换如何工作?
标签: c++ types type-safety