問題タブ [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.
c++ - Boost::any とポリモーフィズム
私はboost::any
ポインターを格納するために使用しており、多態的なデータ型を抽出する方法があるかどうか疑問に思っていました。
これは私が理想的にやりたいことの簡単な例ですが、現在はうまくいきません。
a が B* を格納していて、A* を抽出しようとしているため、これは失敗します。これを達成する方法はありますか?
ありがとう。
c++ - Boost.Any と Boost.Variant の比較
Boost.Any と Boost.Variant の選択に問題があります。
それぞれをいつ使用する必要がありますか?
それぞれの長所と短所は何ですか?
基本的に、外部ソースからいくつかの状態を保存しようとしています。
c++ - boost::any_cast を使用して基本型にキャストする方法は?
私は boost::any を使用してポリモーフィック型を持ちます。オブジェクトをその基本型にキャストできる必要があります。
main 関数のコードは、実行時に次のエラーをスローします。
boost::any_cast コードの static_cast を reinterpret_cast に変更すると、うまくいくようです。ただし、その結果についてはわかりません。
あなたはなにか考えはありますか?
c++ - 配列にオブジェクトを格納する
ブースト信号オブジェクトをマップに保存したい(関連付け:信号名→信号オブジェクト)。信号のシグネチャが異なるため、2番目のタイプのマップはboost::anyである必要があります。
問題は、新しい信号署名のタイプを定義せずにオブジェクトを保存する方法です。
このすべての試みはエラーをスローします:
c++ - 使用量を増やす
ブーストからptr_mapに自分のクラスオブジェクトを挿入するにはどうすればよいですか。オブジェクトはテンプレート化されているため、マップで静的タイプ名を使用することはできません。だから私はしました:
私のクラスはboost::noncopyableを継承しています。
エラーは次のとおりです。エラー:no matching function for call to ‘boost::ptr_map
。
UPD:ラッパーを作成し、boost::anyは使用しないでください。それで:
なぜそれが機能しないのですか(同じエラー)?継承されたクラスを親インターフェイスに渡すことができます。どうしたの?
c++ - 任意からのキャスト
いくつかのクラスを任意の型の値でptr_mapにパックしています。
ここで、シグナルオブジェクトを任意のオブジェクトから復元したいと思います。これのための特別な関数はここにあります:
覚えていると思いますが、ブーストのシグナルはコピーできないので、ポインターのみを格納でき、関数もポインターを返す必要があります。
使用例:
ここでセグメンテーション違反が発生します。get関数で各オブジェクトのタイプを確認しました。
何が問題なのですか?キャスティングに沿ったセグメンテーション違反。オブジェクトは挿入されたタイプで構成されている必要がありますか?キャストしたくない理由。
c++ - ポインターのキャスト
さまざまな種類のポインターを格納するために ptr_map を使用しています。
テンプレート化されたクラス オブジェクトをいくつか格納します。
今、マップから値を取得したいと思います。参照付きのサンプルを次に示します。
しかし、私は参照が好きではありません。たとえば、キャストが悪い場合やオブジェクトが存在しない場合は NULL を返すことができないためです。
このマップからポインターを取得するにはどうすればよいですか?
これはビルドされますが、キャストに失敗します。なぜですか?
c++ - boost::any をストリームに出力するには?
パッケージに含まれる Map std::map<std::string, boost::any>
があります。boost::program_options
次に、そのマップのコンテンツを印刷したいと思います。
残念ながら、定義されboost::any
ていないため、それは不可能です。operator<<
その地図を印刷する最も簡単な方法は何ですか?
any
それぞれを int、次に double、次に string などに自動的にキャストしようとする独自の出力演算子を定義できます。毎回エラーを無視し、キャストが成功して指定された型として出力できるようになるまでキャストを試みます。
しかし、ブーストにはもっと簡単な方法があるはずですか? 私は逆のようなものが必要だろうlexical_cast
...
c++ - STL コンテナーのオーバーロード演算子 ==
クラスオブジェクトを削除しようとしていますlist<boost::any> l
このようなものをメンバー関数として書いてみました
の std::list から class のオブジェクトを削除するオーバーロード関数をどのように記述しますboost::any
か?
c++ - C++-ブースト::任意のシリアル化
私が理解している限り、プレースホルダーのシリアル化(boost::serialization
実際には)のサポートはありません。boost::any
boost::any
カスタムエンティティをシリアル化する方法があるかどうか誰かが知っていますか?
ここでの問題は明らかです。boost::any
テンプレートベースのプレースホルダーを使用してオブジェクトを保存し、適切typeid
かどうかを確認しboost::any_cast
ます。
したがって、カスタム抽象スーパークラスplaceholder
とカスタムテンプレートベースの派生クラスがあり、これらは次の方法で作成されます。
明らかに、これは、このようなものをシリアル化することを考えている場合でも、いくつかの問題を引き起こします。たぶん誰かがそのような種類のシリアル化(そしてもちろん、適切な逆シリアル化)を行うためのいくつかのトリックを知っていますか?
ありがとうございました