問題タブ [boost-functional]
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のラムダライブラリを調べてきましたが、基本的なものが欠けていると思います。やりたいことができない。
現時点で私を困惑させている1つのケース:私は;std::vector
と呼ばれるコレクションを持っています。data
私が求めているのはsize()
、そのコレクションのが特定のしきい値に達したときです。基本的に、condition
ファンクターがtrueを返し、それ以外のdata.size() >= threshold
場合はfalseを返すようにします。しかし、ラムダ構文でそれを表現するのに苦労しています。
私がこれまでに思いついた最高のもの(少なくともコンパイルされますが、動作しません)は次のとおりです。
に入るとDoSomething
、サイズは0になります。実行中にサイズが大きくなっても、呼び出しはcondition()
常にサイズが0になるように見えます。これをトレースすると(Boostの内部では少し注意が必要です)、評価されるgreater_equal
たびに呼び出しているように見えますが、呼び出してcondition()
いるようには見えませんsize()
。
それで、私が完全に台無しにした基本的なことは何ですか?この種のことを表現するためのより簡単な方法はありますか(コードを可能な限りインラインに保ちながら)?
理想的には、C#と同等のコードの流暢さにできるだけ近づけたいと思います。
c++ - 継承に関係なく、「登録された」オブジェクト型のインスタンスを作成できる C++ ファクトリ システムを作成することは可能ですか?
私はこのトピックの調査に 1 日を費やしました。そのため、このトピックに関するいくつかの知識が散在している状態で、この質問をお送りしました。私が達成しようとしていることを説明させてください。差し迫った質問に対する解決策、または問題に完全に取り組む別の方法を提案できるかもしれません.
XAMLファイルがWPFでどのように機能するかに関連する何かを模倣しようとしています。ここでは、本質的に XML 定義からオブジェクト ツリーをインスタンス化しています。これが正しくない場合は、お知らせください。それ以外の場合、この問題はWPF、C#、または管理されているものとは関係ありません-同様の概念であるため、私はそれについてのみ言及します..
そのため、XMLパーサー クラスは既に作成しており、 ObjectNodeオブジェクトに基づいてノード ツリーを生成しています。ObjectNodeオブジェクトはtypeと呼ばれる文字列値を保持し、子ObjectNodeオブジェクトのstd::vectorを持ちます。
次のステップは、 ObjectNodeツリーのデータに基づいてオブジェクトのツリーをインスタンス化することです。同じObjectNodeツリーが複数回インスタンス化されるか、必要に応じて遅延される可能性があるため、この中間ObjectNodeツリーが必要です。作成されるオブジェクトのツリーは、ツリー内のノードが共通の基本クラスの子孫になるようなものです。これは、今のところMyBaseとして参照できます。リーフ ノードは任意の型にすることができ、必ずしもMyBaseから派生させる必要はありません。
これをさらに困難にするために、ツリーに含まれる可能性のあるオブジェクトのタイプがわからないため、新しいタイプをファクトリに登録できるようにする必要があります。
ブーストの工場を認識しています。彼らのドキュメントには、このページに興味深い小さなデザイン パラグラフがあります。
o コンストラクターに転送されるいくつかの引数を取るファクトリが必要な場合があります
。 o おそらくスマート ポインターを使用したい
場合があります。 o さまざまな種類のオブジェクトを作成するためにいくつかのメンバー関数が必要な場合があります。
o ポリモーフィック ベースが必ずしも必要ではない場合があります。 o 後でわかるように、ファクトリ基本クラス
はまったく必要ありません
。o
スタック上にオブジェクトを作成するために #new# を使用せずに、単にコンストラクターを呼び出したい場合があります。
カスタマイズされたメモリ管理を使用します。
私はこれをすべて正しく理解していないかもしれませんが、私がやろうとしていることはブーストの工場で達成できると述べているようです. しかし、私が見つけたすべての例は、すべてのオブジェクトが基本型から派生したファクトリを説明しているようです。
これに関するガイダンスは大歓迎です。
御時間ありがとうございます!
c++ - Boost.Bindと比較してBoost.Functionalの利点は何ですか?
私はBoost.Functionalを使用したことがなく、そのドキュメントを簡単に読んだだけです。標準の < Functional > ヘッダーの改善のようです。
ライブラリの紹介として、 Boost.Functionalのメイン ページ( 「使用法」セクション) の例が選択されました。Boost.Bind (またはBoost.Lambda )を使用すると、同じことが簡単に実行できます。また、Boost.Bindは < Functional > ヘッダーの他のツールの優れた代替手段です。
Boost.Functionalまたは STL < functional > ヘッダーからBoost.Bindで実行できないものはありますか? またはBoost.Functionalの他の利点はありますか?
boost - 抽象的なファクトリ デザイン パターンを使用できるブースト ツールの組み合わせはどれですか?
私が理解していることから、boost::function、boost::factory、および std::map の組み合わせにより、オブジェクト ファクトリを作成できます。http://www.boost.org/doc/libs/1_49_0/libs/functional/factory/doc/html/index.html Loki には抽象ファクトリがありますが、何らかの理由で boost にはありません。抽象ファクトリ パターンを使用するブースト方法は何でしょうか?
私が考えることができる 1 つの方法は、製品を手動で作成するためのインターフェイスを抽象化することです。つまり、同じ作成ポリシーで製品を作成することです。
あなたの答えが静的ポリモーフィズムを使用していれば、もっとうれしいです。
c++ - boost::ブーストユニットを含むタプルのハッシュ
ブースト ユニット タイプが含まれる場所tbb::concurrent_hash_map
のキーでを使用したい。現在使用している HashCompare 構造体は次のようになります。std::tuple<A...>
A...
ブーストユニット以外のすべてのタイプでこれを試してみましたが、ブーストユニットではうまくいきませんでした。boost::hash
カスタムタイプで関数を拡張できることは知っていますが、それはできないようです。私は非常に多くのユニットを持っているので、次の形式のテンプレートでこれを行いたいと思いました:
この関数をboost
名前空間またはユニットが定義されている名前空間に配置しても機能しませんでした。
HashCompare::hash
ブースト ハッシュ関数をカスタム タイプに拡張したり、ブースト ユニットのみを使用する関数のテンプレートを作成したりするにはどうすればよいですか?
c++ - 型の比較演算子を実装する必要なく、順序付けられていないコンテナーをハッシュする
unordered_map
andなどの順序付けられていないコンテナーをハッシュしようとしていunordered_set
ます。ベクトルのような順序付けられた型はboost::hash_range(v.begin(). v.end())
うまく機能しますが、順序にも依存します。
この作業の例: https://coliru.stacked-crooked.com/a/0544c1b146ebeaa0
比較でデータの順序が問題にならないデータ (セットなど) のハッシュ値を計算する場合は、データが常に同じ順序で提供されるようにする必要があります。
わかりました、それは簡単に思えます-何らかの方法でデータをソートするだけですが、ハッシュするたびにこれを実行したくありません. 通常のmap
orを使用してset
も機能する可能性がありますが、かなりの量の書き直しが必要になります。
さらに、これには、私が使用するすべての型が>
、<
、<=
または>=
定義されている必要があり==
、std::hash
.
順序が問題にならないようにコンテナーをハッシュするにはどうすればよいですか?