問題タブ [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.

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

f# - F# を OCaml に変更

F# は OCaml から派生していますが、欠けている、または追加されている主な項目は何ですか? 具体的には、OCaml を学習するために利用できるリソースが、F# を学習したい人にも役立つかどうかについて興味があります。

0 投票する
7 に答える
6406 参照

java - Functor と Command パターンの違いは何ですか?

Command パターンについてはよく知っていますが、Functor と Command の理論上の違いはまだわかりません。特にJavaの実装を考えています。どちらも基本的に、オブジェクトとして表される「動詞」をプログラミングしています。ただし、ファンクタの場合、いくつかの例からわかるように、匿名の内部クラスの実装が一般的です。誰かが私のためにこれをきれいに片付けることができますか?

0 投票する
5 に答える
20432 参照

c++ - boost::function を単純な関数ポインタに降格する

単純な関数ポインターを期待するメソッドに boost::bind を渡したい (同じ署名)。

boost::function の格納を回避して、バインドされたファンクターを直接渡すことができますが、同様のエラーが発生します。

0 投票する
11 に答える
71633 参照

c++ - operator() をオーバーライドする理由

Boost Signalsライブラリでは、() 演算子をオーバーロードしています。

これは C++ の規則ですか? コールバックなどに?

私はこれを同僚のコードで見たことがあります(たまたまBoostの大ファンです)。そこにあるすべてのブーストの良さの中で、これは私を混乱させるだけでした.

この過負荷の理由についての洞察はありますか?

0 投票する
14 に答える
533799 参照

c++ - C++ ファンクタとその用途とは?

C++ のファンクターについてよく耳にします。誰かがそれらが何であるか、そしてどのような場合に役立つかについての概要を教えてもらえますか?

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

c++ - ファンクターを変数として保持する

私はリソース管理クラスに取り組んでおり、ユーザーがリソース マネージャーのコンストラクターの一部として "ReleaseResource" メソッドにファンクターを提供するようにしたいと考えています。そこからリソースが要求されると、リソースが使用されなくなったときに適切なメソッドが呼び出されるように、返される shared_ptr の削除者としてファンクターが提供されます。

私が直面している問題では、クラスにファンクターを保存する必要がありますが、その方法が完全にはわかりません。通常、ファンクターを使用する場合、次のように関数をテンプレート化します。

その関数のスコープでファンクターを使用する場合はこれは素晴らしいことですが、テンプレートが関数のスコープ外になるため、後で使用するためにファンクターを格納するために適切な型の変数を指定する方法がわかりません.

ここで誰かが私を正しい方向に向けることができますか?

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

c++ - マップ/マルチマップで使用するようにファンクターを「適応」させる方法は?

マルチマップで std::for_each やその他のアルゴリズムを使用するのが難しいので、適切なパラメーターを「ジェネリック」関数に渡すことができるファンクターの開発を誰かが手伝ってくれるかどうか知りたいです。

マップ/マルチマップに関する私の特定の問題は、それらのイテレータが、作業する必要がある含まれている値 (つまり、mapped_type) ではなく std::pair に評価されることです。それで、私の質問は、含まれているタイプのマップ/マルチマップの1つで動作するように設計された関数に適切な値を渡す方法はありますか?

ここに私のサンプルコードがあります:

おそらく bind1st または bind2nd を mem_fun と組み合わせてこの問題を解決できると思います。または、元のファンクターを格納してペアの正しいメンバーを渡す新しいファンクターを作成することも考えられますが、私はそうではありませんなんとか良い結果を得ることができました。STLの経験がある人は、アドバイスをいただけますか?

ブーストや追加の一時コンテナを使用せずに、私が得ることができる最高のものは次のとおりです。

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

c++ - I need to create a simple callback in c++? Should I use boost::function?

Suppose I have some code like this:

I need to create a simple callback that will be called whenever the Visitor::visit() is called. I know that I probably should put the code of the callback inside my Visitor, but it is in a different context, so I would like to pass the callBackFunction() to the Visitor so he could invoke my callback function.

I looked for things on the web and saw boost::function, but c++ already has the basic functors.

Which one should I use for better clarity of the code? The callback is going to be a simple void() function, but it might grow, you never know the future :)

What is the recommended way to do this?

0 投票する
5 に答える
1475 参照

c++ - コンストラクターで作業を行うファンクター クラス

C++ テンプレートを使用して Strategy ファンクターを渡し、関数の動作を変更しています。それは正常に動作します。私が渡すファンクターは、ストレージを持たないステートレス クラスであり、() 演算子を従来のファンクターの方法でオーバーロードするだけです。

私はこれを頻繁に行っており、うまく機能しており、多くの場合、6 つまたは 7 つのテンプレート化されたファンクターを渡してテンプレートを作成しています!

ただし、コードのエレガンスと効率の両方について心配しています。ファンクターはステートレスであるため、Operation() コンストラクターはフリーであり、ファンクターの評価はインライン関数と同じくらい効率的であると想定していますが、すべての C++ プログラマーと同様に、私は常にいくつかのしつこい疑問を抱いています。

私の 2 番目の質問は、別のファンクター アプローチを使用できるかどうかです。() 演算子をオーバーライドせず、コンストラクター内のすべてを副作用として実行する方法です。何かのようなもの:

ファンクターの「作業」としてコンストラクターを使用している人を見たことがありませんが、機能するはずです。何か利点はありますか?デメリットは?私は奇妙な二重括弧 "Operator()(a)" の削除が好きですが、それはおそらく美的です。

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

functional-programming - Ocamlのファンクター

ファンクター(およびその結果のタイプ)に少し問題があります。以下に、Orderedタイプを使用するSetファンクターがあります。私は実際set.mlにいくつかのガイダンスのためにocamlに付属しているものを使用しましたが、私はすべてを正しく行っているようです。整数を使用してOrderedモジュールを作成し、それをSetファンクターに適用して、このコードサンプルの最後のモジュールであるIntSetを取得しました。

整数を挿入しようとすると、次の行が失敗します。次のタイプエラーが発生します。

誤解しないでください。ここでは型システムが正しいです。SetInt.eltトップレベルはのタイプがであると報告していSet(OrdInt).eltますが、同じ操作を行ってocamlが提供するものを使用してセットを設定すると、「同じ」行は、SetInt.elt = OrderedInt.tです。私が取得する必要があるようSetInt.elt = Ordered.tです。

これはとても単純なので、私はおそらくいくつかの愚かな詳細が欠けています!ああ!

注意:この問題は型に関係しているため、ここではメンバー/挿入関数を簡略化しました。