gpt4 book ai didi

c++ - 定义 boost 变体类型以传递明确的空值

转载 作者:行者123 更新时间:2023-12-05 04:39:51 26 4
gpt4 key购买 nike

我想要boost::variant与空状态。所以我定义了一个 boost::variantboost::blank作为第一个选择。但是后来我想将其作为函数参数传递:

void f(Variant v);
...
void g()
{
f(boost::blank{});
}

由于牙套,它看起来不太好看。如果它接受似乎更好 boost::none :

void g()
{
f(boost::none);
}

但我好像没见过boost::variant<boost::none_t, ...>任何地方。 boost::none_tboost::optional 的卫星.可以与 boost::variant 一起使用吗? ?

最佳答案

您可以只使用默认构造,这将初始化第一个元素类型。

或者你可以定义你自己的 boost::blank 类型常量:

Live On Wandbox

#include <boost/variant.hpp>
#include <iostream>

using Variant = boost::variant<
boost::blank,
int,
std::string>;

void foo(Variant v = {}) {
std::cout << "foo: " << v.which() << "\n";
}

int main()
{
foo();
foo({});
foo(Variant{});
foo(boost::blank{});

static constexpr boost::blank blank;
foo(blank);

foo(42);
foo("LtUaE");
}

打印

foo: 0
foo: 0
foo: 0
foo: 0
foo: 0
foo: 1
foo: 2

关于c++ - 定义 boost 变体类型以传递明确的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70384319/

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