【发布时间】:2013-08-28 08:18:45
【问题描述】:
相关问题:std::map default value for build-in type -- 细微的差别是我想知道值是初始化为0 还是垃圾,我想指定一个“构造函数”。我什至不在乎它是否涉及类定义的开销,我只想要一个干净的“特殊”基本类型。即使是语法黑客也可以。非基本类型很容易做到这一点,因为它是构造函数的全部工作。
我想要一个哈希图unordered_map<void *, int>,但要将其所有值默认初始化为-1,而不是0 或垃圾。这是因为零是一个有效的索引,我更愿意用一个肯定无效的值进行默认初始化。
我想我看到了一些草率的方法:
struct minus1 {
int i;
minus1() i(-1) {}
};
unordered_map<void*, minus1>
但我不喜欢这样,因为我必须使用 .i 来访问 int,而且它真的只需要是一个 int。
好吧,也许我可以让我的地图处理这个:
struct PointerToIDHash {
std::unordered_map<void *, int> h;
PointerToIDHash() {
// ctor is powerless to affect the initialized values of future insertions into h
}
};
好吧,废话,现在我也有一个.h。嗯。我可以从模板继承吗? (听起来很吓人,但如果可以取消,这可能是一种干净的方式)
如何创建一个透明地像 int 一样但始终初始化为 -1 的类型?
我更希望知道如何使用和不使用 C++11。
【问题讨论】:
-
您是否考虑过提供转换运算符?
-
那是什么? :) 告诉我更多。
-
看看 a.lasram 的回答。这基本上就是我的意思。
-
甜蜜。我知道有一些事情可以做到这一点!
-
不解决初始化问题。相反,解决您希望使用无效索引值初始化
int的问题。此功能已经存在,称为boost::optional。然后您不必使用特殊的 int 值来表示它未初始化,您只需检查可选项是否已初始化。