用户定义类型的强类型检查

时间:2019-01-30 11:18:02

标签: c++ c++11 types c++14 c++17

有时我们使用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 ++标准中)吗?

0 个答案:

没有答案