【发布时间】:2022-01-06 21:19:20
【问题描述】:
在 C++ 中,我想创建一个不会被意外使用或转换为其他类型的类型化变量。我想出的是:
struct DId {
uint32_t v;
DId (uint32_t i = 0)
{
v = i;
}
};
struct TId {
uint32_t v;
TId (uint32_t i = 0)
{
v = i;
}
};
这似乎可行,虽然有时我需要直接访问该值,但我真的应该定义其他方法吗?它在运行时是否使用任何额外的资源? (如果不在调试模式下,我可以使用预处理器命令将其切换为“使用 TId = uint32_t”,但这意味着每当我需要直接访问该值时需要额外的工作。)
还是有一些我没有注意到的更好的方法?
【问题讨论】:
-
请更好地解释您想要实现的目标
-
听起来你想要一个scoped enumeration,虽然这些对于任意值都不是很好,只是为了避免隐式转换为其他类型。
-
谷歌“强类型 c++”
-
您正在寻找“强类型定义”。 Boost有它,你的解决方案也很好。不要在发布模式下做其他事情,没有开销。
-
可能是重复的:stackoverflow.com/questions/34287842/… 有人可以看看吗?