繁体   English   中英

如何移动变体的值<ts…>变成一个变种<t,ts…> ?</t,ts…></ts…>

[英]How do I move the value of a variant<Ts…> into a variant<T,Ts…>?

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

我想有一个选项可以切换Ts...使用额外的 class 模板,但我想知道是否有更优雅的就地方式来做到这一点。

例子:

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));
template<class Dest, class Var>
Dest variant_static_cast( Var&& var ){
  return std::visit( [](auto&& elem)->Dest {
    return static_cast<Dest>( decltype(elem)(elem) );
  }, std::forward<Var>(var) );
}

然后

return variant_static_cast<std::variant<T,T...>>(std::move(var));

这样做是将源变体中的每个可能类型转换为目标类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM