boost::任何带有结构体和无符号整数

boost::any with structs and unsigned ints

本文关键字:无符号整数 结构体 任何带 boost      更新时间:2023-10-16

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

例:

struct S {
int x;
};
S s;
s.x = 5;
boost::any var = s;

在我看来,这是可能的,但它引出了我的下一个问题。 如果这是一个有效的分配,那么我将如何访问数据成员xvar不是struct类型,因为它是boost::any.

我的下一个问题不取决于是否可以访问数据成员。 那么问题是,如果变量a的类型是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>()时,它没有打印,但没有抛出错误。 是否可以使用boost获取像uint8_t这样的类型的值? 如果是这样,怎么办?

我将继续阅读更多关于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怎么办?

完全可以将无符号整数类型分配给boost::any(或std::any,它执行相同的操作,但语法略有不同(。

当我尝试使用boost::any_cast<uint8_t>()时,它没有打印,但没有抛出错误。

那岂不是"打印"了一个字符?所以看起来什么都没有打印。

是否可以使用 Boost 获取像uint8_t这样的类型的值?如果是这样,怎么办?

正如您所期望的那样:

uint8_t u = 234;
boost::any ba = u;
std::cout << "u is " << (int) boost::any_cast<uint8_t>(ba) << 'n';

这确实有效。