c ++中结构中的可选变量(变量结构)

时间:2015-03-11 05:49:07

标签: c++ data-structures stl

我必须在c ++中实现一个具有可选变量的数据结构。 正如

 struct xyz
 {
      int x;  //required
      int y;  //optional
      bool a;  // required
      bool b;  // optional
      bool c;  // optional
      std::string d; //optional
      std::string e; // required
      ........

 }

某些变量需要修复,但部分变量是可选的。

我无法为变量设置任何默认值以告知其可选项,例如bool变量只有两个状态,每个状态对我们的项目都有意义。对于整数也是如此,整数的每个值对我来说都是有用的数据。

我用Google搜索但没有找到任何满意的答案。

我试过std::vector,但看起来不太好。

 struct xyz
 {
      int x;  //required
      std::vector<int> y;  //optional
      bool a;  // required
      std::vector<bool> b;  // optional
      ........
 }

在这个方法中我们可以检查向量的大小,如果零表示变量不存在,否则变量具有所需的值。

但对于bool或4字节int,创建std::vector是数据结构的开销。

任何人都可以建议使用这些方法吗?

1 个答案:

答案 0 :(得分:3)

有些编译器已经发布了即将发布的std::optional - 现在名为std::experimental::optional。我已经使用了一段时间了(GCC 4.9+)并且状态良好。

如果您的编译器还没有它,但对C ++ 11 / C ++ 14有足够的支持,您也可以使用Andrzej Krzemieński's reference implementation中的单个头来避免依赖Boost。