我希望以下内容不能编译。
typedef int relative_index_t; // Define an int to only use for indexing.
void function1(relative_index_t i) {
// Do stuff.
}
relative_index_t y = 1; function1(y); // I want this to build.
int x = 1; function1(x); // I want this to NOT build!
有没有办法实现这个目标?
答案 0 :(得分:5)
typedef
无法做到这一点。
请改用以下代码:
enum class relative_index_t : int {};
使用示例:
int a = 0;
relative_index_t b;
b = (relative_index_t)a; // this doesn't compile without a cast
a = (int)b; // this too
如果您更喜欢C ++风格的演员表,请关注以下内容:
int a = 0;
relative_index_t b;
b = static_cast<relative_index_t>(a);
a = static_cast<int>(b);
答案 1 :(得分:0)
一种技术借用Modula-2的不透明类型:
typedef struct {
int index;
} relative_index_t;
这可能足以防止使用int
转换。它还允许另一个成员变量允许其他功能,如年龄,序列号生成,边界检查等。