gpt4 book ai didi

c++ - 如何确定 boost::variant 变量是否为空?

转载 作者:可可西里 更新时间:2023-11-01 15:45:19 28 4
gpt4 key购买 nike

我定义了一个 boost::variant var 是这样的:

boost::variant<boost::blank, bool, int> foo;

此变量在实例化但未初始化时具有 boost::blank 类型的值,因为 boost::blank 是传递给模板化 boost 的第一个类型::变体。

有时,我想知道 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 不同?

最佳答案

您可以定义一个访问者来检测“空白”:

struct is_blank_f : boost::static_visitor<bool> {
bool operator()(boost::blank) const { return true; }

template<typename T>
bool operator()(T const&) const { return false; }
};

像这样使用它:

bool is_blank(my_variant const& v) {
return boost::apply_visitor(is_blank_f(), v);
}

关于c++ - 如何确定 boost::variant 变量是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31320857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com