首页 > 解决方案 > boost::any 结构体和无符号整数

问题描述

我的问题有几个部分。我一直在研究如何/何时使用boost::any. 我想知道是否可以将 a 分配structboost::any变量。

例子:

struct S {
   int x;
};

S s;
s.x = 5;

boost::any var = s;

在我看来,这是可能的,但它引导我提出下一个问题。如果这是一个有效的分配,那么我将如何访问数据成员xvar不是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_tusing的类型的值boost?如果有怎么办?

我将继续阅读更多关于boost::any的文档,但如果有人对这些问题或主题有见解、细节或注释,请发帖,因为我很想了解更多关于它是如何工作的。谢谢!

标签: c++c++11boostunsigned-integerboost-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';

确实有效


推荐阅读