問題タブ [std-variant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 現在保持されている std::variant の typeid を取得します (boost::variant type() と同様)
boost::variant から std::variant に移行しましたが、問題が発生しました。
ブースト 'type()' で、現在保持されている typeid を取得できる便利な関数を使用していました。https://www.boost.org/doc/libs/1_48_0/doc/html/boost/variant.html#id1752388-bbを参照してください
これは std::variant でどのように達成できますか?
「type_index」に順序付けられていないマップキーがあり、「std::function」という値を保持しています。私のバリアントは、タイプに応じて、マップから取得して何らかの操作を行う関数を決定します。(私が持っているコードは大きすぎて投稿できません)。
特定の std::variant の特定のビジターを作成する以外に、実装のアイデアはありますか? std::variant で 'index()' 関数を使用して、バリアントの型リストにインデックスを付けることができますか? このようなもの:タプルから N 番目の型を取得する方法は?
c++ - バリアントの値への参照を取得するには?
std::variant
すべてのクラスが同じベースから派生している場所があります。バリアントをベースにキャストしたい。
これはコンパイルされますが、警告 C4172 が表示されます: ローカル変数または一時のアドレスを返します
std::variant
ローカルまたは一時的なコピーを作成せずに、その場でアクセスする方法はありますか?
または、それが不可能な場合、値をキャストしてvoid*
使用できるようにするにはどうすればよいstatic_cast
ですか?
更新:例は明らかだと思いましたが、そうではありません。完全な再現は次のとおりです。
c++ - C++2017 std::vector への参照
std::vector
からなるへの参照を保存しようとしていstd::variant
ます。const std::variant<T>&
a の要素に a を作成できますが、vector
ベクトル全体への参照を格納するのに苦労しています。答えは、参照によって保存されたこの投稿 c++ バリアント クラス メンバーに関連していると思いますが、私の状況には適用できません。
c++ - enum を含む std::variant で std::visit を使用する方法
可能な型の一部として列挙型を持つ std::variant を使用しようとしています。コンパイル エラーが発生しましたが、原因がわかりません。列挙型の代わりに他の型を使用すると、コードは機能します。ここに私のコードの一部:
ブロックのコメントを外すと、このコードがコンパイルされないのはなぜですか?
*最初の編集*
コードを次のように変更したところ、動作するようになりました。
c++ - std::visit の呼び出し内から std::variant の保持型を変更できますか
次のコードは未定義の動作を呼び出しますか?
特に、バリアントに が含まれていない場合、このコードは、以前に保持されていた 型のオブジェクトへの参照を保持したまま、 をA
再割り当てします。しかし、代入後は参照が使われなくなっているので、コードは大丈夫だと思います。ただし、標準ライブラリ
は、上記が未定義の動作になるような方法で自由に実装できますか?A
B
std::visit
c++ - テンプレート置換エラーを回避するために std::enable_if で関数をオーバーロードする
1 つは特定のケースをキャッチし、もう 1 つは最初のケースと一致しない他のすべてのケースをキャッチするように、2 つのテンプレート関数を作成したいと考えています。std::enable_if を使用して特定のケースをキャッチしようとしていますが、コンパイラがあいまいな一致で失敗します。あいまいさがコンパイラによって解決されるように、これらのオーバーロードされた関数を作成するにはどうすればよいですか? (私はg ++を使用しています)
次のコードを書いてみました (これは問題を再現する簡単な例です)。
私はコンパイラがすべてのケースを特定のケースに一致させ、他のすべての組み合わせを一般的なケースに一致させることを期待していましたstd::is_same_v<U::resource_t,R>
が、コンパイラは関数があいまいであると言って失敗しました。2番目の定義も試し! std::is_same
ましたが、コンパイラは失敗しますerror: redefinition of ... callCalcValue()...