問題タブ [boost-any]

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 に答える
2561 参照

c++ - boost::anyのビジターパターン

このhttps://gist.github.com/2945472を見つけましたが、c++11に依存しない実装が必要です。ブーストのみを使用するように変換してみましたが、問題があります。

これが私が思いついたものです:

マップに挿入するとbad_any_castが発生します。any_castはそれだけで呼び出されるべきではありません->second(x)?私は何が間違っているのですか?

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

c++ - ブースト::任意の数のキャスト

any 変数に正の 'int' を入れました。次に、「unsigned long」にキャストしようとしています。そして、悪いキャストについて例外がありました。「boost::any_cast」をより柔軟に使用して、整数データを処理する方法。

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

c++ - gdb でタイプがわかっている場合、boost::any の値を確認するにはどうすればよいですか

コア ダンプがあり、gdb でコア ダンプを見ています。

ブーストの値を調べることができる方法があるかどうか疑問に思っていました::gdbの任意の値?

コアにはブースト any へのアドレスがあったので、プレースホルダーにキャストして値を調べてみたのですが、足りませんでした。ブースト any のタイプが unsigned long であることはわかっているので、タイプを知っている any 値を表示する方法はありますか?

この問題について何か助けていただければ幸いです。ありがとう!

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

c++ - C ++パフォーマンス:テンプレートとboost.any

テンプレートを使用できる場所でboost.any(RTTIなし)クラスを使用すると、プログラムの速度が低下するのではないかと思いました。boost anyは実際にはテンプレートクラスのラッパーであるため、最新のコンパイラ最適化では同じ効果が得られると言えますね。

tpl_vs_any.hpp

したがって、次のように言うのは正しいでしょうか。

正確に同じくらい速いです:

あなたが知っていると仮定すると、コンパイラが2番目の例で行うように、それboost::anyはこの状況でdoubleとしてのみ使用されますか?(どのクラスにもRTTIはありません)。

私はこの論文の賛否両論についてもっと疑問に思っています。

また、これらの方法に違いがある特定の状況はありますか?

編集: パフォーマンステスト2:

  • 例1:1,966.57ミリ秒
  • 例2:1,320.37ミリ秒

比較的大きな違いがあるようです。

編集2:doubleプライマリデータ型をクラス と比較することは公平ではなかったので、any私は新しいテストを行いました:

速度:1,794.54ミリ秒

速度:1,715.57ミリ秒

ほぼ同じベンチマークで、複数回テストしました。

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

c++ - RTTIなしでブーストプログラムオプションを使用することは可能ですか?

私のプロジェクトでRTTIを無効にしたいと思います。ただし、このプロジェクトは、-fno-rttiをサポートしないBoostAnyに依存するBoostProgramOptionsを使用します。

RTTIなしでブーストプログラムを使用するための解決策があるかどうか疑問に思いましたか?マクロを定義するか、一部の機能を使用しないことによって?

ありがとう

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

c++ - boost::any とテンプレート

テンプレートのトリックとboost::anyの両方を大量に含むライブラリを書いています。私は本質的にこれを持っている状況に遭遇しました:

...そして、次のような関数を呼び出す必要があります。

わいせつにネストされた一連の if ステートメントに頼ることもできますが、10 個の異なる型を処理していると仮定すると、10,000 個の if ステートメントになります! ここでは Boost プリプロセッサが役立ちますが、これは依然として恐ろしい解決策です。

この種の狂気に頼らずに、boost::any の内容でテンプレート化された関数を呼び出すより良い方法はありますか? 私が知る限り、ありません。

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

c++ - boost::any を使用することをお勧めしますか?

C++ でいくつかの画像処理アルゴリズムを開発しています。コードをより一般化し、プロジェクト全体を再コンパイルせずにすべてを構成できるようにするために、処理アルゴリズムを小さな部分 (「エクストラクター」) に分割し、それらを単一のインターフェイスから継承されたオブジェクトとして作成し、ファクトリ メソッドによって解析された XML ファイルから実行順序とパラメータを構成します。しかし、これらの基本的な処理ブロックの入力と出力の型は異なる可能性があるため、一般化された型として boost::any を使用することを考えたので、画像を使用するすべての操作は次のようになります。

すべてのオブジェクトは、適切な入力と出力の型を内部に格納し、実行するたびにボックス化とボックス化解除を実行する必要があります。そのようなテクニックを使うのは良い考えですか?それは私のニーズをある程度満たし、Pythonでは非常に自然ですが、同時にC++では醜いハックのように見えます。これは本質的に静的型付けであるため、使用する必要があるかどうかは疑問です。

UPD:より明確にするための小さな例

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

c++ - boost_any の使用中にオーバーヘッドを回避することは可能ですか?

boost::anyコンテナーに格納してさまざまな関数に渡すためのユニバーサル型として使用したいと思います。しかし、これらの関数内では常に実際の型を知っているので、実行時に型の安全性チェックは必要なく、課せられたオーバーヘッドでstatic_cast十分です。

理想的な解決策は のようなものを使用することですがboost::polymorphic_downcast、この場合は適用できないことがわかります。

独自のラッパーを作成する必要がありますか、void*それとも別のオプションがありますか?

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

boost - Boost::any がイベントとして使用されているにもかかわらず、MSM をブーストします。遷移は発生しません。

ブースト MSM フレームワークを使用してステート マシンを開発しています。彼らのチュートリアルでは、現在の状態がソース状態である場合、boost::anyを「Kleene イベント」として使用して、発生したイベントの遷移を許可できると述べています。しかし、これは私にはうまくいきません。「no_transition」を受け取るだけです。ここに私のサンプルコードがあります:

実行すると、次の出力が生成されます。

入力: State1

イベント N12_GLOBAL__N_110some_eventE で状態 0 からの遷移なし

出発: State1

入力: State2

「some_event」で「State1」から「State2」への遷移が発生することを期待しますが、どうやらそれは発生しません。

何かが欠けているに違いないのですが、それが何かわかりません。

0 投票する
7 に答える
755 参照

c++ - この倍数の try/catch をすべて回避できますか

私は多くのboost::anyのベクトルを持っていますこのベクトルでは、std::vectorとタイプIContainerの要素に対していくつかの操作を実行する必要があります

だから私は次の機能を実行しました(imoはかなり醜いです)が、誰が正しく動作しますか

メートルはconst std::vector<boost::any>&

多くの " try{}try{}catch{}" を追加しようとしましたが、うまくいきません

私がやったことよりも良い解決策はありますか

編集

James Kanze、user1131467、および Praetorian のソリューションを試しました

したがって、3つはうまく機能していますが、実行時間を計算すると、user1131467の答えは他の答えよりも少し高速です。このすべての if/else を回避するために、各タイプをマップに格納するソリューションを見つける必要があります

また、boost::variant も見ていきます。