我正在使用boost::any
与boost::any_cast<>
结合编写一些框架代码,它应该采用一组参数,几乎就像一个函数调用,并将它们转换为{{1}的数组} types。
到目前为止,一切都运行良好,除非在很难预测调用者给我的号码是签名还是未签名的地方。我们现有产品中的很多代码(基于窗口)对局部变量使用boost::any
和DWORD
数据类型,因此如果使用其中一个变量,我会得到无符号类型。但是,如果常量是硬编码的,那么它最有可能是一个简单的数字,在这种情况下它将被签名。
由于我无法预测是否应该BYTE
或any_cast<int>
,因此50%的时间我的代码会读取any_cast<unsigned int>
数组失败。
有人知道,如果原始类型是签名还是未签名,是否可以使用boost::any
中的某个数字?
答案 0 :(得分:2)
没有办法; boost::any
执行最简单的类型擦除形式,其类型必须完全匹配。您可以编写自己的boost::any
- 类,支持您想要的其他功能。我previously demonstrated如何做到这一点。
如果做不到,你可以:
any_cast<unsigned T>
抛出,请切换到签名路径。)any_cast
投掷,并强制用户应对。但是,这些都不是那么好。你真的需要boost::any
吗?如果你期望某种类型的列表,也许你想要boost::variant
。