c++ - 将 std::variant<A, B> 转换为 std::variant<A, B, C>

标签 c++ c++17

<分区>

我有以下代码:

std::variant<A, B> foo();
std::variant<A, B, C> bar();
std::variant<A, B, C> foobar(bool a) {
    if (a) {
        return foo();
    } else {
        return bar();
    }
}

但是,这不能在 gcc 上编译:

error: could not convert ‘foo()’ from ‘variant<A, B>’ to ‘variant<A,B,C>’.

有没有一种优雅的方式来转换std::variant<A, B>进入std::variant<A, B, C>

最佳答案

原则上,该标准可以允许从 std::variant<T...> 隐式(如果保证成功)或显式(否则)转换至 std::variant<U...>如果前者中的所有类型至少与后者中出现的频率相同,因为存在明确且明显的映射。

不幸的是,它根本没有。

因此,您必须自己编写转换函数。

关于c++ - 将 std::variant<A, B> 转换为 std::variant<A, B, C>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010647/

相关文章:

c++ - 将参数包解压到字符串 View 中

c++ - 在不调用替换运算符 delete 的情况下取消分配由全局替换运算符 new 返回的指针是未定义的行为吗? (C++17)

c++ - 为什么这个 C++ 多态性不起作用?

c++ - 将 _bstr_t com 属性分配给 LPCTSTR 是否安全?

c++ - Rcpp 代码使 R 崩溃

c++ - 是否可以跨多个源文件构建 constexpr 数据结构?

C++ 如何限制一次输入一个字符?

c++ - 如何返回可选指针或引用( std::Optional )?

c++ - 如何将右值引用参数传递给 C++ 中的模板 operator() 函数?

c++ - std::async(std::launch::deferred) + std::future::then 的行为