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

时间:2018-06-27 21:54:10

标签: 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_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>()时,它没有打印,但是没有抛出错误。是否可以使用uint8_t获得类似boost的类型的值?如果可以,怎么办?

我将继续阅读boost::any的更多文档,但如果有人对这些问题或主题有见解,详细信息或注释,请发帖,因为我很想详细了解其工作原理。谢谢!

1 个答案:

答案 0 :(得分:2)

  

我想知道是否可以为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>()时,它没有打印,但是没有抛出错误。

那不是“打印”一个\0字符吗?因此,看起来好像什么都没打印。

  

是否可以使用Boost获得uint8_t之类的类型的值?如果可以,怎么办?

就像您期望的那样:

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

does indeed work