問題タブ [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.

0 投票する
2 に答える
283 参照

c++ - boost::variant ビジター クラスは必須ですか?

class Visitor : public boost::static_visitor<>boost::variantなどのビジター クラスを使用する必要がありますか?

そうでない場合、ビジターを使用しない理由はありますか? ビジタークラスを好む理由はありますか?

この質問をするのは、boost::variant の使用に対してビジター クラスが冗長な側面に見えるためです。

0 投票する
2 に答える
1580 参照

c++ - C++ Boost 再帰バリアントのオーバーロード apply_visitor

要約: 再帰的な boost::variant オブジェクトを含むクラスで apply_visitor() メソッドをオーバーロードしようとしています。

以下に含まれるコードには、次のメソッドがあります。

さまざまな訪問者に対してこのメ​​ソッドをオーバーロードしたいと思います。このようなもの:

しかし問題は、クラス PrintData がまだ完成していないことです (以下のコードのコメントを参照してください)。Node クラスの後に定義されます。そこで、2 つの質問があります (とりわけ、このコードは、私が製品化したいと考えているものをモデル化したものであり、一般的な批評を歓迎します)。

1) apply_visitor(PrintData&) を機能させる方法はありますか?

2) (再帰的) バリアントを再配置して、すべてのビジター メソッドが PrintData にあり、apply_visitor を Node クラスに追加する必要がないようにすることはできますか?

0 投票する
1 に答える
1770 参照

c++ - boost::boost::variant 型を使用したオプションの参照

私は現在、ゲームのコードを書いています。その一部には、ゲームでこれまでに行われたアクションの履歴を作成することが含まれます。この履歴は、state_pair_tのアクションのペア ( action_t) と、アクションが行われた後の結果のゲーム状態へのポインターのベクトルに格納されます。現在、最新の時点から履歴を調べ、特定のタイプのアクションが見つかるまで逆方向に反復し、それへの参照を返す関数があります。no_actionここで、boost optional を使用してアクションが見つからない場合に を返し、 を使用boost::optionalして、値を返す必要があるが返す値がない可能性があるこれらの関数を処理するのが良い設計上の動きであると判断しました。実際にこれを実装しようとすると、理解できないエラーが発生します。

これにより、コンパイルエラーが発生します。

これを少し変更すると、次のようになります。

別のエラーが発生します:

これらのエラーのいずれかがここで何を伝えようとしているのかわかりません。私がここでやろうとしていることは、良い考えではありませboost::optionalんか? それは可能ですか?

0 投票する
0 に答える
345 参照

c++ - テンプレートを取る Visitor で boost::variant 型をトラバースする

次のような永続性クラスがあります。

これは、次のようなタイプを永続化するために使用されます。

上記の API を変更できません。これらの異種の型に対して一括操作を実行したいと考えています。自分のチュートリアルに従って、 boost::variantを部分的に成功させて使用しています。

次に、すべての(多くの)異種タイプにわたる一括操作は、単純に行うことを意図していました。

WriteRecordVisitor はコンパイルされません。エラーは

これは明らかに間違っているように見えますが、何が原因なのかわかりません。

WriteRecordVisitor アプローチを機能させるか、ベクトルを反復処理して (boost::variant<...> を取得)、何らかの方法で (おそらくテンプレートを使用して) boost::get を使用して、適切な各要素を渡したいと思います ( Record<A>, Record<B>, ...) を Writer::write(Record<T>) に変換します。

また、考えられる異種の型ごとにビジター オペレータを定義することも避けたいと思います。これは、最初に異種のコンテナを使用して単純化するという当初の目標に反するからです。

Linux 3.5.4 Fedora 17 で gcc 4.7.2 を使用しています。

0 投票する
2 に答える
783 参照

boost - boost::variant のリストにプッシュする

以下に示すように、本質的に異なるデフォルト以外のコンストラクタープロトタイプを持つ、デフォルト以外の構築可能なクラスのboost::variantオーバーセット(および、移動可能/コピー不可およびコピー/移動不可能なクラスでさえも)があります。

これにより、 /と/がある場合でも、std::list::emplace_back新しいオブジェクト (すべてのAB、型) を (1 回の操作で) リストに作成して挿入できると思います。しかし、コンストラクターが非変換の場合、どうすればよいですか? つまり、複数のパラメーターがあります。または、2 つの異なるバリアントの基になる型があいまいなコンストラクター プロトタイプを持っている場合はどうすればよいですか? 私の意見では、これは、 C++11 標準の新機能に照らして、問題を解決するために適用できるものがあるとすれば、ライブラリの実装の欠陥です。CT & operator = (T const &) = delete;T & operator = (T &&) = delete;T(T const &) = delete;T(T &&) = delete;boost::variant

私が知る限り、どちらもpimplイディオムを何らかの形で内部的に実装しているため (たとえば、一時的なヒープ バックアップ アプローチによって現在設計されています) std::listboost::variant重ね合わせについて具体的に尋ねました。boost::variant

0 投票する
4 に答える
1504 参照

c++ - タイプに関係なく、boost::variant で関数を呼び出しますか?

テンプレートを持つクラスがあります:

クラスにはvoid Process(void)メソッドがあるので、型に関係なく呼び出せるはずで、戻り値は void で、パラメーターはありません。

今のところ、アプリケーションで各フレームのプロセスを呼び出す次のコードがあります。

次の例のように関数 Process() を実行することは可能ですか?

はいの場合、どのように?

0 投票する
2 に答える
1812 参照

c++ - ブーストバリアントタイプをネストしてタイプ制限を増やしますか?

検討:

これにより、 my type が保持できる型の数の制限が に拡張されます。pow(BOOST_VARIANT_LIMIT_TYPES, L)ここで、Lはネストされたレベルの数です。

これは(ある程度)許容できる解決策ですか、それとも単に悪いハックですか?そこにもっと良い解決策はありますか?おそらく、昔ながらのunionほうが適切でしょうか?