C++ 有没有办法从boost::any中得到一个整数;我不知道原始类型是有符号的还是无符号的

C++ 有没有办法从boost::any中得到一个整数;我不知道原始类型是有符号的还是无符号的,c++,boost,boost-any,C++,Boost,Boost Any,我正在使用boost::any和boost::any_cast来编写一些框架代码,这些代码应该包含一组参数,就像函数调用一样,并将它们转换为boost::any类型的数组 到目前为止,一切都很顺利,除了在一些很难预测来电者给我的电话号码是有签名还是无签名的地方。我们现有产品(基于windows)中的许多代码使用DWORD和BYTE数据类型作为局部变量,因此如果使用其中一个变量,我将得到无符号类型。然而,如果一个常数是硬编码的,它很可能是一个简单的数字,在这种情况下,它将被签名 由于我无法预测是否

我正在使用
boost::any
boost::any_cast
来编写一些框架代码,这些代码应该包含一组参数,就像函数调用一样,并将它们转换为
boost::any
类型的数组

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

由于我无法预测是否应该执行
any_cast
any_cast
,因此读取
boost::any
数组的代码有50%的时间会失败


有人知道有没有一种方法可以从
boost::any
中提取一个数字,而不管原始类型是有符号的还是无符号的?

没有一种方法<代码>boost::any执行最简单的类型擦除,其中类型必须完全匹配。您可以编写自己的
boost::任何类似
的类来支持所需的附加功能。我不知道如何做到这一点

否则,您可以:

  • 有两个代码路径,每个符号一个。(如果
    any_cast
    throws,则切换到有符号路径。)
  • 尝试unsigned,如果抛出,则尝试signed和cast,使用单个代码路径
  • 只要让未签名的
    any_cast
    抛出已签名的,并强制用户处理
  • 然而,这些都不是很好。您真的需要
    boost::any
    ?如果您需要某种类型的列表,那么您可能希望使用
    boost::variant