問題タブ [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::任意の内容を比較する
コンテナーを使用して、何かへのポインターのリストを保持しています。
このコンテナーに要素を挿入するために、いくつかのヘルパー関数 (のメンバーstruct Example
)を作成しました。
ここで、要素がこのコンテナに存在しない場合にのみ要素を挿入したいと思います。これを行うには、適切なコンパレータ関数で呼び出すだけでよいと考えましたsearch
。ただし、インスタンスelements
を比較する方法がわかりません。boost::any
私の質問:boost::any
私のインスタンスには常に何かへのポインターが含まれている
ことを知っています。boost::any
2 つの値を比較することは可能ですか?
アップデート
ご回答ありがとうございます。また、おそらく安全でない方法でこれを行うこともできました。 を使用boost::unsafe_any_cast
して a を取得void**
し、基になるポインターを比較します。
今のところ、これで問題なく動作しています。ただし、コメントをいただければ幸いです。これは大きな間違いかもしれません。
c++ - 文字列/ブースト::任意のマップからブースト::オプションを構築する
構成を表すマップがあります。std::string
との地図ですboost::any
。
このマップは最初に初期化されます。ユーザーがコマンドラインでこれらのオプションをオーバーライドできるようにしたいと思います。
私がやりたいのは、このoptions_description::add_option()
メソッドを使用してこのマップからプログラムオプションを作成することです。ただし、テンプレート引数を取りますが、po::value<>
私が持っているのは。だけですboost::any
。
これまでのところ、私はコードのシェルを持っています。 m_Config
構成クラスを表し、をgetTuples()
返しますstd::map<std::string, Tuple>
。 TuplePair
はのtypedefでstd::pair<std::string, Tuple>
あり、タプルにはboost::any
私が興味を持っているものが含まれています。
この方法でそれを構築する方法はありますか、それとも自分でそれを行うことに頼る必要がありますか?
前もって感謝します!
c++ - 元の型が符号付きか符号なしかがわからない場合、boost::any から整数を取得する方法はありますか
boost::any
と組み合わせて使用しboost::any_cast<>
て、関数呼び出しのように一連の引数を取り、それらを型の配列に変換する必要があるフレームワーク コードを記述しboost::any
ます。
これまでのところ、発信者が私に与えた番号が署名されているか署名されていないかを予測するのが難しい場所を除いて、すべてがうまく機能しています. 既存の製品 (Windows ベース) の多くのコードでは、ローカル変数のデータ型が使用DWORD
さBYTE
れているため、これらの変数のいずれかが使用されると、符号なし型になります。ただし、定数がハードコードされている場合は、単純な数値である可能性が高く、その場合は署名されます。
またはを実行する必要があるかどうかを予測できないためany_cast<int>
、配列any_cast<unsigned int>
を読み取るコードは 50% の確率で失敗します。boost::any
boost::any
元の型が署名されているか署名されていないかに関係なく、数字だけを取り出す方法があるかどうかは誰にもわかりませんか?
c++ - boost::any からの関数ポインタの回復
boost::any を使用して、異種の関数ポインターを格納したいと考えています。boost::any_cast を使用して関数ポインターに再キャストしようとすると、例外が発生します。
私がやりたいことは許されますか?
.h:
.cpp
- - 編集 - -
わかりました。そのとおりです。このように動作した理由は、foo がクラス メンバー関数であるためです。
意味:
だから私はtypedefする必要がありました:
c++ - 変更されない型を持つ各要素の任意/バリアントの C++ コンテナー
std::map<const char*, boost::any>
ライブラリの設定を保存するために使用しています。各設定は単一の基になる値の型のみを使用し、構成の呼び出し中にこれを強制したいと考えてset()
います。設定は、正しいタイプのデフォルト値で初期化されます。
これは、私が達成しようとしていることをうまく示している疑似コードです。
実行時にこのような型エラーをトラップすることは可能ですか? 可能であれば、API にテンプレート関数を含めたくないです。
私は使用しましたが、それが唯一の実行可能な解決策である場合は、boost::any
boost::variant を検討するかもしれません。which()
c++ - オブジェクトへの参照を使用して boost::any を初期化するにはどうすればよいですか?
オブジェクトへの参照をオブジェクトに格納したいboost::any
。boost::any オブジェクトを初期化するにはどうすればよいですか? を試しstd::ref()
ましたboost::any
が、 で初期化されstd::reference_wrapper<>
ます。たとえば、次の
版画
代わりboost::any
に含むようにしたい。int&
c++ - boost::任意のデストラクタ クラッシュ
メインexeはdllをロードします。単純な boost::any を返す dll から関数を呼び出します。デストラクタで FreeLibrary アプリがクラッシュした後、boost::any が削除された場合。大丈夫です。しかし、なぜこのコードがr2デストラクタでもクラッシュするのか理解できません.r2はメインで作成され、削除はdllコードを必要としません。FreeLibrary の後に boost::any を保存するにはどうすればよいですか。extern "C"なしで試しました-同じ効果。
コンソールコード:
DLL コード:
コンパイラ Visual Studio 2005
c++ - C++11 標準は、boost::any のようなものを提供していますか?
たとえば、boost::function
ほぼ完全に に移動std::function
します。boost::shared_ptr
しかし、私は見つけることができませんstd::any
か?なんらかの理由で名前が変更されたのか、それとも新しい標準にまったく配置されなかったのか?
boost - boost::shared_ptr を含む std::list からデータを取得する方法
に保持されているデータを取得しようとするのを手伝う必要がありますstd::list<boost::shared_ptr<boost::any>>
private を持つ Singleton Controller クラスに取り組んでいますstd::list
。クライアント クラスは、この Controller クラスを介して、プログラムで使用される具体的なクラス オブジェクトを追加/削除/編集できます。
使用する理由boost::shared_ptr
は、作成した各具象クラスに一意の objID を割り当てるためです。インスタンス obj がコントローラに追加されると、ユーザーは後で obj を検索して削除できるようになります。各具象クラスのAdd(....)
およびオーバーロードされたメソッドは正常に機能します。Remove(...)
getObject(int index)
&メソッドを作成しようとしてsetObject(int index)
いますが、返されたポインターを Concrete クラスにキャストする方法がわかりません。
お知らせ下さい。
私の現在のコード:
c# - C# - boost::any に似たものはありますか?
要件があります: 1. 任意のタイプのオブジェクトをリストに格納する必要がある 2. 呼び出しのキャストをできるだけ避ける
そのために、私は何かを考え出そうとしました。何を試しても、ボクシング\アンボクシングを取り除くことはできませんでした。あなたの誰かがそれを達成する何かに出くわしたかどうか知りたかった.
私が作成したクラスは、メモリとパフォーマンスの点で ArrayList の 1.5 倍かかるため、小さなコレクションを扱っていない限り、ほとんど役に立ちません。それらの少なくとも 1 つ (できればパフォーマンス) も改善する方法を見つけようとしています。
フィードバックをお待ちしております。
編集
要するに、私は達成しようとしています:
@ winSharp93: はい、要するに: List GenericGenericCollection = new List ();
GenericGenericCollection.Add(新しい文字列("ソネット");
GenericGenericCollection.Add(42);
GenericGenericCollection.Add(新しい MyOwnCustomType);
もう一度編集
私が見つけた 2 つの方法があります。 1. .NET 4 では、新しい「dynamic」キーワードが導入されています。に行Object _o;
を差し替えればdynamic _o;
そのままコードが使えます。問題は、 dynamic が動的タイプであるはずですが、パフォーマンスはボクシングのようです..
一般的な == 演算子に依存する代わりに、暗黙的 (私が好む) または明示的なキャスト演算子を追加することで、パフォーマンスを向上させることができます。
http://igoro.com/archive/fun-with-c-generics-down-casting-to-a-generic-type/に基づいて、次のクラスを追加しました。これにより、ボックス化とパフォーマンスが処理されます。次のクラスのパフォーマンスは、int または Castable の ArrayList よりもわずかに優れています。もちろん、
List<int>
比較すると先は長いです。私の観点からの唯一の問題は、オブジェクトがプレーンな Any オブジェクトに割り当てられて、具体的な型が内部に埋め込まれていることAnyInternal<T>
です。method を持つ方法も見つかりませんでしたT Get()
。キーワード dynamic でさえ、実行時にステートメントで失敗します。
Any.AnyInternal<dynamic> any = (Any.AnyInternal<dynamic>)anyInstanceContainingAnyInternalForInt;