支持行和列查找的 C++ 容器

C++ container to support row and column lookup

给定几种数据类型,我正在尝试实现一种方法来确定所有其他类型可以转换为哪种类型。

整数 -> 浮点数 -> 布尔值

int 可以转换为 float,float 可以转换为 boolean。然而,反之则不然,例如布尔值无法转换为浮点数。

所以假设我有以下类型:int、float、boolean,所有其他类型可以转换为的类型是boolean。这可以使用以下 table 来计算,其中将问题中的所有类型相互比较以确定它们是否可以转换为它:

int float boolean
int true true true
float false true true
boolean false false true

例如在 int 行中,int 可以转换为 int、float 和 boolean。但是在float行中,float不能转换为int,但可以转换为float或boolean。

布尔列全部为真,表明所有其他类型都可以转换为它。

我正在尝试将此逻辑实现到 C++ 中,但是我无法确定性能方面最适合 table 的容器类型。我已经有一个名为 canConvert(Type1, Type2) 的方法,其中 returns true/false 如果 Type1 可以转换为 Type2,它将用于填充 table . table 将需要通过行和列进行查找,并且还需要在末尾逐列扫描以确定该列的所有行是否为真。

支持这种比较的最佳容器类型是什么?

std::is_convertible,但我认为你的table不符合std::is_convertible的定义(例如std::is_convertible<int,float>::valuestd::is_convertible<float,int>::value都是true).

不过,你的table只依赖类型,所以没必要让table占用内存。您可以将信息编码为以下类型:

 template <typename T,typename U>
 struct my_table : std::false_type {};

我选择将 false 作为默认设置,这样您只需要专门针对 true 个案例:

 template <> struct my_table<bool,int> : std::true_type {};
 template <> struct my_table<bool,float> : std::true_type {};
 template <> struct my_table<bool,bool> : std::true_type {};
 // ...