boost::any 具有结构和无符号整数

boost::any with structs and unsigned ints

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

示例:

struct S {
   int x;
};

S s;
s.x = 5;

boost::any var = s;

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

我的下一个问题不依赖于数据成员是否可以访问。那么问题来了,如果变量 a 的类型是 uint8_t 怎么办?

示例: 编辑:正如评论中指出的,下面的代码确实支持 uint8_t 但未打印出来。见 uint8_t can't be printed with 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 的更多文档,但如果有人对这些问题或主题有见解、细节或注释,请 post 因为我很想了解更多作品。谢谢!

I was wondering if it is possible to assign a struct to a boost::any variable

是。

How would I access the data member x?

您可以使用 any_cast<S>(var).x 访问。继续你的例子:

int& the_x_member = any_cast<S>(var).x;
std::cout << "s.x is " << the_x_member << "\n";

What if variable a is of type uint8_t?

完全可以将无符号整数类型分配给 boost::any(或 std::any,它们做同样的事情,但语法略有不同)。

When I tried using boost::any_cast<uint8_t>() it did not print, but did not throw an error.

那 "print" 不是 [=20=] 字符吗?所以看起来好像什么都没打印。

Is it possible to get the value of a type like uint8_t using Boost? If so how?

正如您所期望的那样:

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

这个does indeed work.