【发布时间】:2015-06-27 05:12:01
【问题描述】:
在我的工作场所,我正在处理一个用例,我必须将多个内部/产品级数据类型转换为与 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::any、boost::variant 和 boost::any_cast、boost::numeric_cast,但到目前为止还没有具体的结果。我总是以重复代码或使用某种机制(控制结构或哈希表)来选择特定值以获得足够的信息进行类型转换。
内部/产品级数据类型是整数、浮点、双精度和字符的变体(在大小、有符号/无符号方面)。
请帮助。提前致谢。
【问题讨论】:
-
如果数据类型可以处理 I/O 运算符
<<和>>那么也许使用std::stringstream作为中介?将自定义数据对象写入流,读入其他类型。 -
@Joachim 请注意他说“为了性能”......我很怀疑 stringstream 比 switch/case 更好。
-
@Daniel True,但我真的认为不需要重写。对于 OP 来说,你现在所拥有的将很难表现得更好。但这一切都取决于用例,您确实需要对所有可能的解决方案进行基准测试和衡量,从分析您现在拥有的内容开始,看看这是否真的是您认为的瓶颈。