有没有办法从 boost::any 中获取一个整数,如果您不知道原始类型是有符号的还是无符号的
Is there a way get an integer out of boost::any if you don't know if original type was signed or unsigned
我使用boost::any
与boost::any_cast<>
相结合来编写一些框架代码,这些代码应该采用一组参数,几乎像函数调用,并将它们转换为boost::any
类型的数组。
到目前为止,一切都很顺利,除了在很难预测来电者给我的号码是有符号的还是无符号的地方。我们现有产品(基于windows)中的许多代码使用DWORD
和BYTE
数据类型作为局部变量,因此如果使用其中一个变量,我将获得unsigned类型。但是,如果常量是硬编码的,那么它最有可能是一个简单的数字,在这种情况下它将被带符号。
因为我不能预测我应该做any_cast<int>
还是any_cast<unsigned int>
, 50%的时间我的代码读取boost::any
数组将失败。
有没有人知道,如果有一种方法,只是一个数字的boost::any
,无论原始类型是有符号或无符号?
没有办法;boost::any
执行最简单的类型擦除,类型必须完全匹配。您可以编写自己的类似boost::any
的类来支持所需的其他特性。我之前已经演示了如何做到这一点。
如果做不到,你可以:
- 有两个代码路径,每个符号一个。(如果
any_cast<unsigned T>
抛出,则切换到签名路径) - 尝试无符号,如果抛出,尝试有符号和强制转换,使用单个代码路径
- 只要让unsigned
any_cast
抛出,如果它是签名的,并强制用户处理。
然而,这些都不是真的那么好。你真的需要boost::any
吗?如果你想要一个特定的类型列表,也许你想要boost::variant
。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 我不知道这条线是做什么的
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 如何用 c++ 读取 txt 文件,如果我们不知道其中有多少个数据字符串,以及每行有多长?
- 静态断言,如果在编译时不知道表达
- C++如果我不知道数组大小并且需要接收数组怎么办
- 如果您不知道所传递方法的确切类,如何将方法传递给类
- 如何使用 dlsym() 调用函数,如果我不知道返回类型和参数
- 普吉克斯姆.如何从节点获取所有子结构,如果事先不知道它的位置
- 如果block没有进入,不知道为什么
- 有没有办法从 boost::any 中获取一个整数,如果您不知道原始类型是有符号的还是无符号的
- 如果不知道特殊成员函数的参数类型,如何默认其参数类型?
- 在c++中声明一个局部变量const的好处,如果它的值在编译时不知道