問題タブ [functor]
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++ - 入力ストリームから次の値を読み取るファンクターを作成するにはどうすればよいですか?
このようなもの :
std::bind1st(std::mem_fun(&istream::get ??), cin)
。これは私にはうまくいかないようです。
編集:
使用する :
c++ - STL Algorithm for_each がファンクタのデストラクタを 2 回呼び出すのはなぜですか?
私は STL アルゴリズムを試していて、より具体的には for_each 関数を使っていました。文字列のベクトルを連結するための簡単な使用例を試しました。これはおそらく適切で効率的なコードではないことに注意してください。本当に文字列のベクトルを連結したい場合は、boost::algorithm::join 関数を見てください。
連結子クラスは、通常のファンクターとして実装されます。
concatenator.h:
concatenator.cpp:
このプログラムをコンパイルして実行すると、次の出力が得られます。
concat hello to
concat world to hello
concat !!! to hello world
concatenator destructor called
concatenator destructor called
result =
concatenator destructor called
ファンクタから正しい結果を抽出できない理由と、デストラクタが何度も呼び出される理由を誰かが説明できますか?
haskell - デフォルトでControl.Monad.Instancesで(->)実装されないのはなぜですか
私はLYAHを読んでいました。Control.Monad.Instances
次の構文を機能させるには、明示的にロードする必要があると表示されます。
何故ですか?Control.Monad.Instances
ファンクターがこの基盤となる統合テクノロジーである場合、その機能を取得するために明示的にロードする必要があるのはなぜですか。(->)はそれなしでどのように実装されますか(または単に非表示にされて->
エクスポートされるだけです)?fmap
デフォルトでover関数型の使用が実装されていないのはなぜですか?
c++ - C++ ファンクター コールバックのセットアップ
コールバック システムをセットアップするために、newty.deの Lars Haendel のFunctor チュートリアルに従っています。私は少し混乱していますが、誰かが私を助けてくれることを願っています.
これが私のFunctorテンプレートです
私がやりたいことは、基本的に他の .dll が私の HookGameEvent() 関数を使用できるようにすることです。ゲーム イベントが呼び出されたときに、フックの vector||list を実行し、イベント名が一致するかどうかを確認してから、必要に応じてコールバックします。私を混乱させているのは、このような HookEvent 構造体にコールバックを格納する方法です。
今のところコメントアウトしていますが、何が混乱しているのか、どこで失敗しているのかは明らかです。誰かが何か援助を提供できるなら、それは大歓迎です。
c++ - C++ クラス メンバーのテンプレート関数とそれをインスタンス化するファンクターを定義する場所は?
小さなスタンドアロンプロジェクトで使用されるクラス Foo があります。Foo.h にクラス定義があり、実装ファイル Foo.cpp にクラスのメンバー関数が実装されています。
最初の質問 - クラス Foo のメンバー関数の 1 つはテンプレート メソッド Foo::doSomething() です。このメソッドの実装が Foo.h の関数の宣言と共に表示されるのは正しいですか?
Foo::doSomething() がインスタンス化されるテンプレート パラメータは、クラス CalcA と CalcB の 2 つの Functor タイプの 1 つです。
するべきか:
- (A) 2 つの Functor クラスの定義と実装をすべて Foo.cpp にまとめます (実際には、他の Foo メンバー関数の実装によって Foo::doSomething を呼び出すために使用されます)。
- (B) 2 つの Functor クラスの定義と実装を Foo.h に配置します。
- (C) 通常のクラスで行うように、2 つのファンクターの定義と実装を Foo.h と Foo.cpp に分割する必要がありますか?
c++ - C++ - クラス テンプレートからメソッドを呼び出す
現在、C++ のクラス テンプレートで問題が発生しています。現在、ハッシュテーブルを作成しています。
テーブルのインスタンスごとにハッシュ関数を指定するクラス テンプレートとしてファンクターを使用しています。
IE: 1 つのテーブルには、キーに整数、値に文字列があります。別のキーには文字列があり、値には整数などがあります...
そして、キーをハッシュするために「myHash」というメソッドを呼び出したいとしましょう。まず、次のようにして呼び出します。
しかし、gcc は、たとえば HashFuntor(string, unsigned int) の関数オーバーロードを検出しません。
myHash を呼び出す方法を教えてもらえますか? (注: ファンクターの構造を変更したくありません)
編集:これは、実際のソリューションから得られるエラーメッセージです
編集: HacheString が実際には HashString であると書かれている箇所はどこでも (コードを翻訳してここに貼り付けました)。
c++ - ファンクターとテンプレートパラメーター
ファンクタースタイルの述語の代わりに静的メンバー関数でテンプレートパラメーターを使用する場合、パフォーマンス上の利点はありますか?
たとえば、ファンクタースタイルのソートインターフェイスは通常、次のようなものです。
このようなことを行うことができ_Pred
、静的メンバー関数が含まれている必要があり_Pred::less_than
ます。
理論的には、最初のケースはヒープ上に一時的なファンクターオブジェクトを動的に作成する可能性がありますが、2番目のケースはコンパイル時に完全に評価されると思います。(たとえば)gccやmsvcは最適化に優れていることを理解していますが、最初のケースではこれを同じ程度に行うことができますか?
また、私はSTLソートルーチンなどを書き直そうとはしていません。より一般的なファンクターの質問の例にすぎません...
c++ - 生のポインターとスマートポインターの両方を受け入れるC++ファンクターを作成できますか?
次の場合:
私はのコンテナを持っており、Foo*
を使用std::find_if
して、指定された値とは異なるものを返すstd::not1
要素がコンテナ内にあるかどうかを調べます。bar()
コードは次のようになります。
将来に向けて早送りすると、今度はを含む別のコンテナができましたstd::tr1::shared_ptr<Foo>
。のオーバーロードされたバージョンでファンクターを再利用したいだけですisAllEqual()
。しかし、私はできません。 Foo*
とshared_ptr<Foo>
は異なるタイプです。unary_function
そして、を使用できるように、から継承する必要がありますnot1
。同じファンクターを2回書くのを避けられれば、もっとエレガントになるでしょう。
質問:
IsEqual
生のポインターとスマートポインターの両方を使用できるように書く方法はありますか?- 使って手錠をかけました
std::not1
か?IsNotEqual
代わりに書くべきですか?
制限:
- Boostライブラリの何も使用できません。
- 私たちのコンパイラは、C++0xラムダをサポートするのに十分なほどクールではありません。
c++ - どちらの場合が良いですか?
私はリストを持っていますMyClass
:
削除する場合はどのような方が良いですか(c ++の設計とパフォーマンス):
また
また
なぜ?
PSお願いします、ラムダ関数とC++0xはありません。
stl - std::map を並べ替えるには?
ここに私の地図があります:
はPositionMonth
構造体です。例:
質問: std::map
2 番目の値のキー パラメータ (by market_value_
、int とします) で並べ替える方法を教えてください。例またはリンク?
PS。興味のないブースト方法!
PPS。比較ファンクターで std::map を初期化できません!
手伝ってくれてありがとう!
私の解決策(または私が自分でやった方法):
そして機能において:
どこ_Entry
ですかPositionMonth
終わり!