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;
在我看来这是可能的,但它引出了我的下一个问题。如果这是一个有效的分配,那么我将如何访问数据成员 x
? var
不是 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';
我的问题分为几个部分。我一直在研究 how/when 以使用 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_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 typeuint8_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';