我如何将变量的值 移到变量 ?

问题描述 投票:1回答:1

是否有一种简单的方法可以将某些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);
}
c++ variadic-templates variant
1个回答
0
投票

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

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

0
投票
template<class Dest, class Var>
Dest variant_cast( Var&& var ){
  return std::visit( [](auto&& elem)->Dest {
    return Dest( decltype(elem)(elem) );
  }, std::forward<Var>(var) );
}

然后

return variant_cast<std::variant<T,T...>>(std::move(var));
© www.soinside.com 2019 - 2024. All rights reserved.