問題タブ [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 投票する
3 に答える
2398 参照

c++ - Boost::any とポリモーフィズム

私はboost::anyポインターを格納するために使用しており、多態的なデータ型を抽出する方法があるかどうか疑問に思っていました。

これは私が理想的にやりたいことの簡単な例ですが、現在はうまくいきません。

a が B* を格納していて、A* を抽出しようとしているため、これは失敗します。これを達成する方法はありますか?

ありがとう。

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

c++ - Boost.Any と Boost.Variant の比較

Boost.Any と Boost.Variant の選択に問題があります。
それぞれをいつ使用する必要がありますか?

それぞれの長所と短所は何ですか?

基本的に、外部ソースからいくつかの状態を保存しようとしています。

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

c++ - boost::any_cast を使用して基本型にキャストする方法は?

私は boost::any を使用してポリモーフィック型を持ちます。オブジェクトをその基本型にキャストできる必要があります。

main 関数のコードは、実行時に次のエラーをスローします。

boost::any_cast コードの static_cast を reinterpret_cast に変更すると、うまくいくようです。ただし、その結果についてはわかりません。

あなたはなにか考えはありますか?

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

c++ - 配列にオブジェクトを格納する

ブースト信号オブジェクトをマップに保存したい(関連付け:信号名→信号オブジェクト)。信号のシグネチャが異なるため、2番目のタイプのマップはboost::anyである必要があります。

問題は、新しい信号署名のタイプを定義せずにオブジェクトを保存する方法です。

このすべての試みはエラーをスローします:

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

c++ - 使用量を増やす

ブーストからptr_mapに自分のクラスオブジェクトを挿入するにはどうすればよいですか。オブジェクトはテンプレート化されているため、マップで静的タイプ名を使用することはできません。だから私はしました:

私のクラスはboost::noncopyableを継承しています。

エラーは次のとおりです。エラー:no matching function for call to ‘boost::ptr_map


UPD:ラッパーを作成し、boost::anyは使用しないでください。それで:

なぜそれが機能しないのですか(同じエラー)?継承されたクラスを親インターフェイスに渡すことができます。どうしたの?

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

c++ - 任意からのキャスト

いくつかのクラスを任意の型の値でptr_mapにパックしています。

ここで、シグナルオブジェクトを任意のオブジェクトから復元したいと思います。これのための特別な関数はここにあります:

覚えていると思いますが、ブーストのシグナルはコピーできないので、ポインターのみを格納でき、関数もポインターを返す必要があります。

使用例:

ここでセグメンテーション違反が発生します。get関数で各オブジェクトのタイプを確認しました。

何が問題なのですか?キャスティングに沿ったセグメンテーション違反。オブジェクトは挿入されたタイプで構成されている必要がありますか?キャストしたくない理由。

0 投票する
3 に答える
288 参照

c++ - ポインターのキャスト

さまざまな種類のポインターを格納するために ptr_map を使用しています。

テンプレート化されたクラス オブジェクトをいくつか格納します。

今、マップから値を取得したいと思います。参照付きのサンプルを次に示します。

しかし、私は参照が好きではありません。たとえば、キャストが悪い場合やオブジェクトが存在しない場合は NULL を返すことができないためです。

このマップからポインターを取得するにはどうすればよいですか?

これはビルドされますが、キャストに失敗します。なぜですか?

0 投票する
9 に答える
10066 参照

c++ - boost::any をストリームに出力するには?

パッケージに含まれる Map std::map<std::string, boost::any>があります。boost::program_options次に、そのマップのコンテンツを印刷したいと思います。

残念ながら、定義されboost::anyていないため、それは不可能です。operator<<

その地図を印刷する最も簡単な方法は何ですか?

anyそれぞれを int、次に double、次に string などに自動的にキャストしようとする独自の出力演算子を定義できます。毎回エラーを無視し、キャストが成功して指定された型として出力できるようになるまでキャストを試みます。

しかし、ブーストにはもっと簡単な方法があるはずですか? 私は逆のようなものが必要だろうlexical_cast...

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

c++ - STL コンテナーのオーバーロード演算子 ==

クラスオブジェクトを削除しようとしていますlist<boost::any> l

このようなものをメンバー関数として書いてみました

の std::list から class のオブジェクトを削除するオーバーロード関数をどのように記述しますboost::anyか?

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

c++ - C++-ブースト::任意のシリアル化

私が理解している限り、プレースホルダーのシリアル化(boost::serialization実際には)のサポートはありません。boost::any

boost::anyカスタムエンティティをシリアル化する方法があるかどうか誰かが知っていますか?

ここでの問題は明らかです。boost::anyテンプレートベースのプレースホルダーを使用してオブジェクトを保存し、適切typeidかどうかを確認しboost::any_castます。

したがって、カスタム抽象スーパークラスplaceholderとカスタムテンプレートベースの派生クラスがあり、これらは次の方法で作成されます。

明らかに、これは、このようなものをシリアル化することを考えている場合でも、いくつかの問題を引き起こします。たぶん誰かがそのような種類のシリアル化(そしてもちろん、適切な逆シリアル化)を行うためのいくつかのトリックを知っていますか?

ありがとうございました