問題タブ [boost-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::list を繰り返す
std::list をループするとき、どのようにオブジェクト タイプをチェックしますか?
c++ - boost::variant のビジター テンプレート
をテンプレート 'Visitor' クラスのパラメーターとして使用したいと思いboost.variant<T0,T1,T2>
ます。このクラスは、boost.variant ビジター メカニズムで必要なビジター オペレーターを提供します。この場合、すべて void を返します。
テンプレートには、バリアント内の各タイプ T0... に対して、デフォルトでは何もしない対応する仮想関数もあります。ユーザーはテンプレート クラスから継承し、関心のある仮想関数のみを再定義できます。これは、よく知られている「テンプレート メソッド」パターンに似たものです。私が思いついた唯一の解決策は、boost::variant と関連するビジターの両方を 1 つのテンプレートにラップし、typedef を介してそれらにアクセスすることです。これは問題なく動作しますが、少しぎこちなく感じます。コードは次のとおりです。
クラスは次のように使用されます。
私が言うように、これは問題なく動作するようですが、バリアントとビジターを結びつける特別なラッパー クラスを作成する必要がなければ、それを好むでしょう。テンプレートのビジター クラスをインスタンス化するために直接 boost.variant を使用できるようにしたいと考えています。型パラメーター、非型パラメーター、およびテンプレート テンプレート パラメーターの使用について調べましたが、何も示唆していないようです。私がやろうとしていることは不可能ですか?私は何かが欠けているかもしれません。誰かがこれについて意見を持っていれば幸いです。
c++ - shared_ptrおよびboost::static_visitorからboost::variantを作成するためのC++テンプレートメタプログラミング
個人的な演習として、shared_ptrを使用してビジターパターンを実装したいと思います。私はRobertMartinの非巡回ビジターペーパーに精通していますが、仮想accept()の煩わしい性質と、{X}クラスごとに{X}Visitorクラスを作成する必要があるのは不快です。{X} :: accept()と{X} Visitorを必要とせずにすべてのロジックをローカルにカプセル化するので、boost::static_visitorクラスが好きです。
私が探しているのは、以下で説明するテンプレート関数関数ripを作成する方法のヒントです(私が言ったように、これは演習として行っています)。私はそれが次の形式でなければならないと思います:
同様のことを行うチュートリアルへのヒントやポインタをいただければ幸いです。ありがとう。
c++ - std::map のキーにするために boost::variant を比較する方法は?
boost::variant を比較して std::map のキーにする方法は? boost::variant に operator<() が定義されていないようです
c++ - 型のテンプレート パラメーターに boost::mpl::list を適用する
次のように、さまざまな型への共有ポインターを含む boost::variant を必要とするクラスがあります。
現在、このクラスをコンパイルするには、次の形式のテンプレート パラメーターが必要です。
次のはるかに単純な定義をユーザーに許可し、クラス実装内で上記の例の形式に変換できるように、mpl リストを使用するにはどうすればよいですか?
c++ - boost::variant再帰的トラブル
これを機能させる方法はありますか?私はあなたがアイデアを理解することを願っています、私は再帰的なペアを使ってリストを作成しようとしています
c++ - boost::variantとboost::any workはどのように機能しますか?
バリアントおよびBoostライブラリのいずれかは内部でどのように機能しますか?私が取り組んでいるプロジェクトでは、現在タグ付き共用体を使用しています。C ++の共用体では、コンストラクタ、デストラクタ、またはオーバーロードされた代入演算子でオブジェクトを使用できないため、別のものを使用したいと思います。
anyとvariantのサイズを照会し、それらを使用していくつかの実験を行いました。私のプラットフォームでは、バリアントは可能な限り長いタイプに8バイトを加えたサイズを取ります。タイプ情報は8バイトで、残りはプリペイドカードだと思います。一方、どれも8バイトしかかかりません。私は64ビットプラットフォームを使用しているので、ポインタを保持しているだけだと思います。
誰がそれがどんなタイプを持っているかをどうやって知るのですか?Variantは、テンプレートを介してどのように機能を実現しますか?これらのクラスを使用する前に、これらのクラスについて詳しく知りたいと思います。
c++ - boost::variant によって集約された型のオブジェクトを、その boost::variant を受け入れる関数に渡す
私が持っているとします:
これで結構です:
/li>これはコンパイルされません:
エラーで:
タイプ「TypeA」の式からのタイプ「Type&」の参照の無効な初期化</p>
また、これはコンパイルされません:
エラーで:
引数 '1' を 'void foo(Type*)' にするために 'TypeA*' を 'Type*' に変換できません</p>
boost::variant を受け入れる関数に、参照 (ケース 2 のように) またはポインタ (ケース 3 のように) のいずれかを介して、その boost::variant によって集約された型の 1 つのインスタンスを渡す方法はありますか? ?
どうもありがとうございました!
c++ - boost::variant およびベクトル内の要素の印刷方法
このコードを実行しようとすると、次のエラーが発生します。
ただし、文字列であるため、size() メソッドが必要です。何が問題なのかわかりません。最後の行を次のように置き換えることに注意してください。
予想どおり、「そろばん」が出力されます。
c++ - boost::variantおよびmsgpack用にエンコードするデータの取得
ブースト再帰バリアントを使用して、生データをencode()関数に渡す必要があるmsgpackを使用してエンコードするバリアントデータを格納しています(以下を参照)。
以下のencode()関数で3つの異なるオプションを試しましたが、機能しません。代替案は何ですか?