c++ - 如果您不知道原始类型是有符号的还是无符号的,有没有办法从 boost::any 中获取整数

标签 c++ boost boost-any

我正在使用 boost::any结合 boost::any_cast<>编写一些框架代码,它应该接受一组参数,几乎就像一个函数调用,并将它们转换成一个 boost::any 的数组。类型。

到目前为止,一切都运行良好,除了有些地方很难预测来电者给我的号码是签名还是未签名。我们现有产品(基于 Windows)中的很多代码使用 DWORDBYTE局部变量的数据类型,所以如果使用其中一个变量,我得到无符号类型。然而,如果一个常量是硬编码的,它很可能是一个简单的数字,在这种情况下它将被签名。

因为我无法预测我是否应该做 any_cast<int>any_cast<unsigned int> , 50% 的时间我的代码读取 boost::any阵列将失败。

有谁知道是否有办法从 boost::any 中提取一个数字?不管原始类型是签名还是未签名?

最佳答案

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

否则,您可以:

  1. 有两个代码路径,每个符号一个。 (如果 any_cast<unsigned T> 抛出,则切换到签名路径。)
  2. 尝试未签名,如果抛出错误,请尝试签名和强制转换,使用单一代码路径。
  3. 让未签名的any_cast如果已签名,则抛出并强制用户应对。

然而,其中每一个都不是那么好。你真的需要boost::any ?也许你想要 boost::variant相反,如果您需要特定的类型列表。

关于c++ - 如果您不知道原始类型是有符号的还是无符号的,有没有办法从 boost::any 中获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695645/

相关文章:

c++ - 默认在开关 block 的开头

c++ - 定义一个符号,它可能是 boost spirit 中文字函数的一部分

C++ - boost::any 序列化

c++ - call .mutable_mynested msg() 和 .nested msg() 之间有什么区别吗?

c++ - 在被重新分配的类的构造函数中使用变量的地址

c++ - 为什么箭头运算符 "->"不能在 boost::numeric::ublas::vector<...>::iterator 上工作?

c++ - 如何获得对 boost::any 持有的数据的 const 引用?

c++ - boost :任意分布的 vector

c++ - 比 C++ 标准严格要求的更多的公共(public)成员函数

c++ - GTKMM 和 boost.asio