C++ boost::具有结构和无符号整数的任意

C++ boost::具有结构和无符号整数的任意,c++,c++11,boost,unsigned-integer,boost-any,C++,C++11,Boost,Unsigned Integer,Boost Any,我的问题有几个部分。我一直在研究如何/何时使用boost::any。我想知道是否可以将struct分配给boost::any变量 示例: struct S { int x; }; S s; s.x = 5; boost::any var = s; 在我看来,这是可能的,但这将引导我进入下一个问题。如果这是一个有效的赋值,那么如何访问数据成员xvar不是struct类型,因为它是boost::any 我的下一个问题不取决于是否可以访问数据成员。那么问题是,如果变量a的类型为uint8\

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

示例:

struct S {
   int x;
};

S s;
s.x = 5;

boost::any var = s;
在我看来,这是可能的,但这将引导我进入下一个问题。如果这是一个有效的赋值,那么如何访问数据成员
x
var
不是
struct
类型,因为它是
boost::any

我的下一个问题不取决于是否可以访问数据成员。那么问题是,如果变量
a
的类型为
uint8\t
,该怎么办

示例:编辑:正如注释中指出的,下面的代码确实支持uint8\t,但没有打印出来。看

uint8\u t a=10;
boost::任意b=a;
标准::cout
我想知道是否可以将结构分配给
boost::any
变量

是的

如何访问数据成员
x

您可以使用
任意_cast(var.x
进行访问。继续你的例子:

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

我想知道是否可以将结构分配给
boost::any
变量

是的

如何访问数据成员
x

您可以使用
任意_cast(var.x
进行访问。继续你的例子:

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

这一点。

最好的确定方法就是尝试一下。我看不出uint8有任何问题,除了c++11之前的版本,它可能被别名为char。任何类型的原理都是擦除。正如您链接到的文档中所述,转换是通过
any\u cast
,而不是
cast\u any
。如果这是你问题中的一个输入错误,请修正它。如果这是您的代码中的一个输入错误,那么可能这就是您的问题之一。@JaMiT是的,这是一个输入错误,谢谢。使用
任何输入都可以。你可能有problem@vu1p3n0x我想你是对的。因为我看不到这个值,所以我在
any\u cast
上使用了
sizeof
,看到它是1。所以我认为价值就在那里。。谢谢你的输入,最好的办法就是试试看。我看不出uint8有任何问题,除了c++11之前的版本,它可能被别名为char。任何类型的原理都是擦除。正如您链接到的文档中所述,转换是通过
any\u cast
,而不是
cast\u any
。如果这是你问题中的一个输入错误,请修正它。如果这是您的代码中的一个输入错误,那么可能这就是您的问题之一。@JaMiT是的,这是一个输入错误,谢谢。使用
任何输入都可以。你可能有problem@vu1p3n0x我想你是对的。因为我看不到这个值,所以我在
any\u cast
上使用了
sizeof
,看到它是1。所以我认为价值就在那里。。非常感谢Hanks的洞察力,非常有帮助。我意识到我的第二个例子再次使用
x
是误导性的,这让我觉得它实际上仍然是一个数据成员。我将对其进行编辑,以便将来的读者能更清楚地看到它。非常感谢!非常感谢您的洞察力,非常有帮助。我意识到我的第二个例子再次使用
x
是误导性的,这让我觉得它实际上仍然是一个数据成员。我将对其进行编辑,以便将来的读者能更清楚地看到它。非常感谢!
uint8_t u = 234;
boost::any ba = u;
std::cout << "u is " << (int) boost::any_cast<uint8_t>(ba) << '\n';