支持行和列查找的 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>::value
和std::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 {};
// ...
给定几种数据类型,我正在尝试实现一种方法来确定所有其他类型可以转换为哪种类型。
整数 -> 浮点数 -> 布尔值
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>::value
和std::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 {};
// ...