std::variant
私はstd::variant
というタイプのスーパーセットを持つ別のものに変換したいと思っています。それを行う方法はありますか?私は単に一方を他方に割り当てることができますか?std :: variantをスーパータイプの別のstd :: variantに変換する
template <typename ToVariant, typename FromVariant>
ToVariant ConvertVariant(const FromVariant& from) {
ToVariant to = std::visit([](auto&& arg) -> ToVariant {return arg ; }, from);
return to;
}
int main()
{
std::variant<int , double> a;
a = 5;
std::variant <std::string, double, int> b;
b = ConvertVariant<decltype(b),decltype(a)>(a);
return 0;
}
私は単純ではなく、この複雑な鋳造セットアップを経由するよりも、変換を行うためにb = a
を書くことができるようにしたいと思います。 std
名前空間を汚染することなく
編集:
error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::variant<int,double>' (or there is no acceptable conversion)
note: while trying to match the argument list '(std::variant<std::string,int,double>, std::variant<int,double>)'
'U'は、すべてのタイプの宇宙であり、PはUを持っている場合、PはUに等しいではないでしょうか? 解決しようとしている問題の理解に問題があります。 – P0W
'b = a'を直接コンパイルして問題を確認してください。 –
エラーC2679:バイナリ '=':タイプ 'std :: variant'の右オペランドを取る演算子が見つかりません(または受け入れ可能な変換はありません) 注:しようとしている間に引数リストに一致する '(std :: variant 、std :: variant )' –
Bomaz