問題タブ [stdbind]

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 投票する
1 に答える
2184 参照

c++ - boost::signals2 のバインディング クラス メンバー関数

std::bind を使用して、クラス メンバー関数を含むラムダを作成しましたが、boost::signals2 はそれを受け入れません。

を呼び出してCut、新しいものがある場合に通知したいクラスがあります。Eventvoid Cut::newEvent(Event& e)

Cut のインスタンスへのラムダ バインディングを作成しましたが、Event を渡すと期待どおりに動作します。(コードはコンパイルされ、出力は「Registered new event」です。)

ただし、このラムダをインスタンスに接続しようとするboost::signals2::signal<void(Event&)>と、次のメッセージが表示されます。

error: 'f' cannot be used as a function

main() の関数として使用できるため、これは奇妙です。std::function<void(Event&)>( auto の代わりに使用しても同じ結果が得られます。

これを機能させることは可能ですか?現在機能していないのはなぜですか?

これは関連するコードです:

0 投票する
2 に答える
3355 参照

c++ - 非静的クラス メンバを Win32 コールバック関数 WNDPROC に「std::bind」するにはどうすればよいですか?

WNDPROC非静的クラス メンバーを標準関数にバインドしようとしています。クラスメンバーを静的にすることで、これを簡単に実行できることはわかっています。しかし、C++11 STL の学習者として、<functional>ヘッダーの下にあるツールを使用してそれを行うことに非常に興味があります。

私のコードは次のとおりです。

そのまま実行すると、次のエラー メッセージが表示されます。

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

c++ - std::shared_ptrs の std::reference_wrapper の並列

関数への参照をバインドする場合はf、 を使用できますstd::bind(f, std::ref(x))。この場合f、参照を取得するか、コピーを作成します。

今私は関数を持っていますvoid g(T & t)。入力引数を次のようにバインドしたいと思いstd::shared_ptr<T> mySharedPtrます: std::bind(g, mySharedPtr)mySharedPtrこれにより、のデータが少なくともバインドと同じだけ存続することが保証されます。ただしg、参照を取るため、これは型チェックを行いません。

に渡す前にstd::refa を取り、それを逆参照するのに似たものはありますか? そうでない場合は、自分で作成できますか?std::shared_ptrg

(ラムダを使用して回答する場合は、コンパイラがサポートしていないため、ラムダを使用しないものも含めてください。)

編集:std::bind(g, std::ref(*mySharedPtr))の生涯保証が失われるため、機能しませんstd::shared_ptr

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

c++ - 派生クラスが明示的に呼び出す必要がないように、基本クラスのコンストラクターを std::bind できますか?

メンバーを初期化するためにコンストラクターに渡されるいくつかのオブジェクトを必要とする抽象基本クラスがあります。しかし、これらのオブジェクトを派生クラス コンストラクターを介して渡す必要はありません。

基本クラスに渡されるオブジェクトは、作成されたすべての派生クラスの同じインスタンスです。それらを基本クラスのコンストラクターにバインドして、派生クラスのコンストラクターを介して転送する必要がないようにする方法はありますか?

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

c++ - C++ std::bind は typename を最初の引数として受け入れます

私はいくつかの奇妙な行動に遭遇しました。

このコードは私にエラーを与えます:

入力として型名が好きでstd::bindはないようです。これに対する回避策はありますか? 同じパラメーターを手動で使用std::bindしても問題なく動作しますが、定型コードになります。

入力がなくても、コンパイル時にエラーが発生します。機能が動作しないのはなぜですか?

編集:助けてくれてありがとう。結局のところ、bind は型名を受け入れず、アドレスを受け入れます。

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

c++ - std::bind を使用して BinaryPredicate から UnaryPredicate を作成し、std::transform で使用する

私は最近、この使用法に遭遇しましたfor_each

まあ、それは動作します。Ts と T f のコンテナーの場合、これは各値を f で乗算します。ただし、ここでラムダを使用するのは嫌いです。短いですが、重複しているだけのようですstd::multiplies。また、変更の意図を表すには、for_eachではなく、しかし、とすべきです。transform

ただし、std::multiplies二項述語でstd::transformあり、単項述語が必要です。

f を 1 つのパラメーターとしてバインドしようとしましたが、どうやら使い方が間違っているようです。

GCC はエラー メッセージでヒントを提供しようとしますが、実際の原因はわかりません。

使い方がstd::bind間違っているのではないかと疑っています。私の間違いは何ですか?

0 投票する
0 に答える
164 参照

c++ - std::bind には、その結果に対してブーストのようなオーバーロードされた演算子がありますか?

Boost には、boost::bind 結果タイプのオーバーロードされた演算子があります。So!bind(f, ...)は と同等bind( logical_not(), bind(f, ...) )です。||、&& などの他の演算子も使用できます。std::bind には同じ機能がありますか? 使えます!std::bind(...)か?std::not1c ++ 11では非推奨ですか?