如果您不知道原始类型是签名还是未签名,有没有办法从boost :: any中获取整数

时间:2011-10-08 08:23:12

标签: c++ boost boost-any

我正在使用boost::anyboost::any_cast<>结合编写一些框架代码,它应该采用一组参数,几乎就像一个函数调用,并将它们转换为{{1}的数组} types。

到目前为止,一切都运行良好,除非在很难预测调用者给我的号码是签名还是未签名的地方。我们现有产品中的很多代码(基于窗口)对局部变量使用boost::anyDWORD数据类型,因此如果使用其中一个变量,我会得到无符号类型。但是,如果常量是硬编码的,那么它最有可能是一个简单的数字,在这种情况下它将被签名。

由于我无法预测是否应该BYTEany_cast<int>,因此50%的时间我的代码会读取any_cast<unsigned int>数组失败。

有人知道,如果原始类型是签名还是未签名,是否可以使用boost::any中的某个数字?

1 个答案:

答案 0 :(得分:2)

没有办法; boost::any执行最简单的类型擦除形式,其类型必须完全匹配。您可以编写自己的boost::any - 类,支持您想要的其他功能。我previously demonstrated如何做到这一点。

如果做不到,你可以:

  1. 有两个代码路径,每个符号一个。 (如果any_cast<unsigned T>抛出,请切换到签名路径。)
  2. 尝试无符号,如果抛出,请尝试签名并强制转换,使用单个代码路径。
  3. 如果已签名,只需让未签名的any_cast投掷,并强制用户应对。
  4. 但是,这些都不是那么好。你真的需要boost::any吗?如果你期望某种类型的列表,也许你想要boost::variant