問題タブ [std-function]
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::function が nullptr に割り当てられているかどうかを確認する
に割り当てた関数ポインタstd::function
がnullptr
. !
-operator がそれを行うことを期待していましたが、関数に type の何かが割り当てられている場合にのみ機能するようですnullptr_t
。
今のところ、これを回避するためにこのヘルパー関数を作成しました。
c++ - std::関数は合計可能な型を返しますか?
並列アルゴリズムのグラフ データ構造には、次の反復子メソッドがあります。
関数をテンプレート パラメーターとして宣言することもできhandle
ましたが、C++11 で推奨される方法は を使用することだと思いましたstd::function
。
このようなイテレータで OpenMP を使用して、並列リダクションを実行したいと考えています。への各呼び出しの戻り値はhandle
合計に縮小されます。関数テンプレートを使用すると、次のようになります。
を使用して同等のものは何std::function
ですか? double または int を返す型を定義できますhandle
か (関数の本体は両方で機能するため)。
c++ - 非静的クラス メンバを Win32 コールバック関数 WNDPROC に「std::bind」するにはどうすればよいですか?
WNDPROC
非静的クラス メンバーを標準関数にバインドしようとしています。クラスメンバーを静的にすることで、これを簡単に実行できることはわかっています。しかし、C++11 STL の学習者として、<functional>
ヘッダーの下にあるツールを使用してそれを行うことに非常に興味があります。
私のコードは次のとおりです。
そのまま実行すると、次のエラー メッセージが表示されます。
function - std::function でポリモーフィズムを使用するにはどうすればよいですか?
2つのクラスがあるとしましょう:
そしてstd::function
、タイプA のすべてを受け取りますが、 Aから継承するクラスを受け取る割り当てメソッドを使用したい( Bなど)。
コンパイラは暗黙的にダウンキャストするだけではないため、これは明らかに機能しません。
しかし、どうすればこのようなことができますか? 基本的に、いくつかの基本的な std::function 型のマップを保持したいと思います。マップされた各値では、Bstd::function
のような派生型を保持します。
キャスト演算子をプレースホルダーにバインドする方法はありますか?
c++ - std::function をシリアル化できますか?
これは理論的な問題です。それらのオブジェクトのイベントにサブスクライブされたコールバック関数のリストを含むいくつかのオブジェクトがあるとします。これらのオブジェクトをディスクに保存します。std::function
シリアライズ可能ですか?
c++ - テンプレート関数を別のテンプレート関数の引数にするにはどうすればよいですか?
さまざまなアルゴリズムを保持するクラスがあります。
これらは次の方法で呼び出すことができます。
ここで、「アルゴリズム」関数を取り、その関数を呼び出す前後に同じ手順を実行する関数を作成したいと考えています。
ここに私が持っているものがあります:
次のように関数を呼び出そうとすると:
私が得るエラーは次のとおりです。
目的のアルゴリズムをパラメーターとして受け取る一般的なルーチンを設定するにはどうすればよいですか?
編集:
このソリューションは希望どおりに機能しました。次のようになります。
c++ - 2 つの異なる明示的なコンストラクターに暗黙的に変換可能な std::bind の戻り値の型
explicit
2 つのコンストラクター オーバーロード (異なる型に基づく)が与えられstd::function<...>
た場合、の戻り値はどちらかstd::bind
を選択できます(それにより、呼び出しがあいまいになります)。
どちらかをコメントアウトすると、コードがコンパイルされます!
explicit
コンストラクターを作成すると、正しいオーバーロードが選択されるか、両方が選択されないようになると思いましたか?
もちろん、バインドした時点で明示的にa を作成すると、次のように機能します。std::function
しかし、なぜ型推論が機能しないのか、私は戸惑っていますか?
- からの戻り値
std::bind
が 2 つのコンストラクター シグネチャのいずれにも一致しない場合、それらがexplicit
両方とも選択されないようにする必要があります。 - からの戻り値
std::bind
が 2 つのコンストラクター シグネチャのいずれかに一致する場合、それらが一致するという事実explicit
により、正しいものが選択されるはずです。
ここで実際に何が起こっているのですか?
以下の完全な作業コード: