将多个内部类型转换为系统级类型

时间:2015-04-20 12:56:41

标签: c++ templates c++11 boost

在我的工作场所,我正在研究一个用例,我必须将多个内部/产品级数据类型转换为C ++兼容的数据类型。之前我们使用了名为switch fence的东西,代码看起来像

switch(InternalTypeCategory)
{

case InternalTypeA:
           convert_to_int8_t;
           break;

case InternalTypeB:
           convert_to_int16_t
           break;

.....

}

但是为了性能和其他相关问题,我们将把这个switch fence块转换为基于C ++模板的代码,我们不时使用switch case。

到目前为止我尝试了什么?

我一直在玩boost::anyboost::variantboost::any_castboost::numeric_cast但到目前为止还没有具体的内容。我总是最终重复代码或使用某种机制(控制结构或哈希表)来选择特定值以获得足够的类型转换信息。

内部/产品级数据类型是整数,浮点,双精度和字符的变体(按大小,有符号/无符号)。

请帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

模板仅在编译时定义类型时才会帮助您。由于您使用的是变体,我认为这是不可能的。

然而,一种简单的方法是使用转换方法表,然后使用internalType作为这些方法的索引。

为所有转换函数创建通用接口:

typedef InternalVariant (*conversionFunc_ptr)(const InternalVariant& data);

定义所有可用函数的数组并根据需要进行分配:

static conversionFunc_ptr conversionFunc[MaxInternalTypeCategory];

conversionFunc[InternalTypeA] = convert_to_int8;
conversionFunc[InternalTypeB] = convert_to_int16;
[...]

在实际功能中使用它是这样的:

return conversionFunc[InternalTypeCategory](*this);

注意:您不应使用实例成员,而应使用静态成员。所以你需要为函数提供变量(否则你只需要为每个值设置一次转换数组)