問題タブ [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.
ocaml - ファンクターの実装の問題
以下で説明するモジュールの目的は、整数nによって開始されると、nの値に基づいてすべての操作を実行するモジュールを実装することです。
エラー:バインドされていないモジュールタイプint
ここでの問題は何ですか?より効果的/直感的な代替実装はありますか?
c++ - ネストされたboost::bindで構成なしで引数置換を実行します
nullaryファンクターを引数として取る関数があるとします。
intを取り、内部で何かを行う別の関数があります。
これらを一緒にネストしますが、作成しないで、署名付きのファンクターを取得します。
値(たとえば4)で呼び出されると、次のように実行されます。
私の最初の試みは次のとおりでした。
ネストされたバインドが与えられると、バインドが合成を実行するため、これは失敗します。fooが最初に呼び出され、次に値voidがエンキューに「返され」ましたが、これは失敗します。
私の2番目の試みは次のとおりです。
enqueueは単項ファンクターではなく、nullaryを受け入れるため、これは失敗しました。
私が求めていることはできますか?
その他の情報:
- これは基本的に、6年前の未回答のブーストフォーラムの質問と同じです:http: //lists.boost.org/boost-users/2004/07/7125.php
- いくつかの読書は、boost :: lambda::bindをboost::lambda::unlambdaおよびboost::lambda::protectと一緒に使用すると私が求めていることを実行できることを示唆しています。残念ながら、boost :: lambdaの許可されるプレースホルダーの数は許容できないほど少なく(3)、コンパイル時のオーバーヘッドが高くなります。
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ラムダをサポートするのに十分なほどクールではありません。