我必须在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
是数据结构的开销。
任何人都可以建议使用这些方法吗?
答案 0 :(得分:3)
有些编译器已经发布了即将发布的std::optional
- 现在名为std::experimental::optional
。我已经使用了一段时间了(GCC 4.9+)并且状态良好。
如果您的编译器还没有它,但对C ++ 11 / C ++ 14有足够的支持,您也可以使用Andrzej Krzemieński's reference implementation中的单个头来避免依赖Boost。