有时我们使用using Key = uint32_t;
来定义新类型。
问题是-它只是别名。如果定义了两种类型,则不会对它们进行类型检查:
using RowKey = uint32_t;
using ColKey = uint32_t;
std::map
<RowKey, std::map<ColKey, int>> myStorage;
RowKey keyR = 1;
ColKey keyC = 2;
int res1 = myStorage[keyR][keyC]; // it's ok
int res2 = myStorage[keyC][keyR]; // it's ok too, but it shouldn't compile!
一种可能的解决方案是在int周围定义一个包装器类(或其他一些我们作为键的类),但是我认为这是开销。.
还有其他解决方案(也许在新的C ++标准中)吗?