c++ - 如何将variant <Ts…>的值移动到variant <T,Ts…>中?

标签 c++ variadic-templates variant

是否有一种简单的方法可以将std::variant<Ts...>中包含的数据移动到std::variant<T,Ts...>中?

我想可以通过一个额外的类模板来切换Ts...中的所有类型,但是我想知道是否存在一种更优雅的就地方法。

例:

template <typename T, typename... Ts>
std::variant<T,Ts...> use(std::optional<T>&& opt, std::variant<Ts...>&& var) {
  if (opt.has_value()) return *opt;
  else return magic<T,T...>(var);
}

最佳答案

您可以访问,然后构造新的变量类型:

return std::visit([](auto&& arg) -> std::variant<T, Ts...> {
    return std::forward<decltype(arg)>(arg);
}, std::move(var));

关于c++ - 如何将variant <Ts…>的值移动到variant <T,Ts…>中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61290807/

相关文章:

c++ - 如何使 String::Find(is) 省略这个

c++ - `char _3 = ' c'` 在 C 和 C++ 中有效吗?

c++ - 可变参数模板类未完全展开

c++ - 可变参数模板的未声明标识符

linux - D-Bus、UDisk 和 Glibmm 的绑定(bind)

C++17 使用 std::variant 表示 DOM

c++ - 我有第三方库,我有错误 LNK2019 : unresolved external . .. 如何调查修复它

c++ - 如何使用 std::accumulate 和 lambda 计算平均值?

c++ - 将 CTAD 与多个模板参数包一起应用

c++ - 如何在 C++ 中将结构转换为 VARIANT