c++ - boost::any 结构体和无符号整数
问题描述
我的问题有几个部分。我一直在研究如何/何时使用boost::any
. 我想知道是否可以将 a 分配struct
给boost::any
变量。
例子:
struct S {
int x;
};
S s;
s.x = 5;
boost::any var = s;
在我看来,这是可能的,但它引导我提出下一个问题。如果这是一个有效的分配,那么我将如何访问数据成员x
? var
不是struct
类型,因为它是boost::any
。
我的下一个问题不取决于数据成员是否可以访问。那么问题是,如果 variablea
是 type怎么办uint8_t
。
示例: 编辑:正如评论中所指出的,下面的代码确实支持 uint8_t 但它没有被打印出来。请参阅 uint8_t 无法使用 cout 打印。
uint8_t a = 10;
boost::any b = a;
std::cout << boost::any_cast<uint8_t>(b);
我发现可以使用boost::any_cast
但没有发现它支持无符号类型。当我尝试使用boost::any_cast<uint8_t>()
它时没有打印,但没有抛出错误。是否有可能获得类似uint8_t
using的类型的值boost
?如果有怎么办?
我将继续阅读更多关于boost::any的文档,但如果有人对这些问题或主题有见解、细节或注释,请发帖,因为我很想了解更多关于它是如何工作的。谢谢!
解决方案
我想知道是否可以将结构分配给
boost::any
变量
这是。
我将如何访问数据成员
x
?
您将使用any_cast<S>(var).x
. 继续你的例子:
int& the_x_member = any_cast<S>(var).x;
std::cout << "s.x is " << the_x_member << "\n";
如果变量
a
是类型uint8_t
怎么办?
完全可以将无符号整数类型分配给 a boost::any
(或std::any
,它做同样的事情但语法有所不同)。
当我尝试使用
boost::any_cast<uint8_t>()
它时没有打印,但没有抛出错误。
那不会“打印”一个\0
字符吗?所以看起来什么都没有打印。
是否有可能获得像
uint8_t
使用 Boost 这样的类型的值?如果有怎么办?
就像您期望的那样:
uint8_t u = 234;
boost::any ba = u;
std::cout << "u is " << (int) boost::any_cast<uint8_t>(ba) << '\n';
这确实有效。
推荐阅读
- php - 用php显示随机方程的结果
- regex - 在正则表达式领域,什么是回溯?
- java - 如何在java中读取.csv中文文件以及为什么这两个导致不同的结果
- sparql - 使用 GROUP_CONCAT 和 BIND 生成单个语句
- mongodb - 如何改进 MongoDB 中的地理空间查询
- javascript - 状态突变是副作用?
- tensorflow - 从 Java 中使用 DNNRegressor 生成的模型中读取权重
- c - socket() 中“type”为 SOCK_DGRAM 或 SOCK_STREAM 时是否需要指定“protocol”?
- django - Google OAuth 2.0 不断尝试使用“http”url 进行回调
- pandas - 比较特定列的值并将值添加到另一个 | 熊猫 | Python