【发布时间】:2015-09-28 00:39:39
【问题描述】:
我已经定义了一个 boost::variant var,如下所示:
boost::variant<boost::blank, bool, int> foo;
此变量在实例化但未初始化时具有boost::blank 类型的值,因为boost::blank 是传递给模板化 boost::variant 的第一个类型。
在某些时候,我想知道foo 是否已被初始化。我试过这个,但没有好的结果:
if (foo) //doesn't compile
if (foo != boost::blank()) //doesn't compile
if (!(foo == boost::blank())) //doesn't compile
我认为值得注意的是,当 foo 已初始化(例如,foo = true)时,可以通过执行 foo = boost::blank(); 来“重置”。
如何检查foo 是否已初始化,即它的类型与boost::blank 不同?
【问题讨论】:
-
bool const is_blank = boost::get<boost::blank>(&foo) -
@PiotrS。它有效,但我不太明白为什么。需要详细说明吗?
-
@PiotrS.:
boost::variant<comment, answer> foo(getWhatThatShouldHaveBeen()); assert(foo.which() == 1); -
@FerranMG:为什么不阅读文档???
-
@FerranMG:我的回答非常便宜。有问题吗?