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

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

c++ - メソッド引数の std::function、copy または shared_ptr?

std::function をコールバック ハンドラとして使用しようとしています。

このような、

この例では、参照渡しを使用しました。

しかし問題は、関数がプログラムの非同期コンテキストで実行されるため、std::functionオブジェクトがまだ存在することを保証できないことです。callback

そのため、関数オブジェクトのライフサイクルを管理する必要があり、そのために 2 つの方法を考えました。

  1. 値渡し(コピー)の使用

  2. 使用してstd::shared_ptr

私のシステムでは のサイズがstd::function24 バイトに固定されており、std::shared_ptr8 であることを知っています。

ただし、コピーするstd::shared_ptrと、参照カウンターを管理する追加のオーバーヘッドが発生します。(さらに、 の shared_ptr オブジェクトを作成するスマートできちんとした方法が見つかりませんstd::function。)

どちらの方法でパフォーマンスが向上しますか?

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

c++ - アルゴリズム関数: テンプレートにするか、std::function パラメーターを取りますか?

Graph という C++ クラスがあり、アルゴリズム メソッド for_each_node() があります。次のように、テンプレートにすることもできます。

または、次のように std::function を使用します。

std::for_each などの標準アルゴリズムは最初のアプローチを使用しますが、gtkmm (GTK+ の C++ バインディング) などの一部のライブラリは、関数をそれらを含むオブジェクトの関数ポインターとして受け取ります。

各オプションの利点と欠点は何ですか? どちらを選択すればよいかわかりません。選択に影響を与えるもの: Graph クラスがクラス テンプレートかどうか、アルゴリズム メソッドで使用されると予想されるさまざまな関数の数、または速度要件。

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

c++ - C++11 より前の std::function に似たものはありますか?

std::function<>C++11 が利用できない場合の代用として、どの構造を使用する必要がありますか?
代替手段は、基本的に、以下の例のように、あるクラスのプライベート メンバー関数に別のクラスからアクセスできるようにする必要があります (std::function の他の機能は使用されません)。クラス Foo は固定されており、あまり変更できません。クラス Bar にしかアクセスできません。

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

c++ - Clang++ は、std::function とラムダについて、メモリをリークする実行可能ファイルを生成します

ArchLinux (i686) 上の Clang++ 3.2 を使用して、次の C++11 コードをビルドします。

clang++ test.cpp -std=c++0x && valgrind --leak-check=full --log-file=tmp.log.memcheck ./a.outそれから私は得る

そのコードに問題があるかどうか (そして 1 バイトのリークが発生するだけかどうか) はわかりませんが、g++ 4.7 を使用してコンパイルすると、メモリ リークは発生しません。それについて何か提案はありますか?

0 投票する
6 に答える
6087 参照

c++ - 渡された値を返すだけのデフォルト関数?

怠惰な開発者として、私はこのトリックを使用してデフォルトの関数を指定するのが好きです。

しかし、私は非常に特殊なケースで問題を抱えています。それは次のとおりです。

この場合、デフォルトの関数を次の関数と同等にしたいと思います[](const unsigned int i){return i;}(渡された値を返すだけの関数)。

そのためには、との代わりに何を書く必要が/*SOMETHING 1*/あり/*SOMETHING 2*/ますか?

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

c++ - 奇妙なテンプレート構文

gcc-4.7.2のソース コードを調べていて、std::function理解std::bindできないメンバー関数ポインターに使用される構文に出くわしました。

私が理解していないのは、次の専門化です_Maybe_wrap_member_pointer

  • _Tpと の間にコンマがないのはなぜ_Class::*ですか?

  • メンバー関数void foo::bar()(以下のサンプル アプリ) を考えると、ここで何を_Tp解決_Class::*するのでしょうか?

以下は、メンバー関数ポインターとオブジェクトをバインドするサンプル アプリです。std::bind(メンバー関数の特殊化/内部に関連するソースコードを引き出しました)

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

c++ - C++任意の関数をDLLからstd::functionに動的にロードします

単一の関数を使用して、任意のダイナミックリンクライブラリ(dll)関数をオブジェクトにロードするにはどうすればよいですか?std::function

たとえば、2つの関数をdllにコンパイルしたいと思います。

そして、次のような単一の関数を使用して、実行時に両方をロードします。

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

c++ - 関数ポインターでカバーされていない std::function のユースケースはありますか、それとも単なる構文糖ですか?

std::function の表記は、関数ポインターと比較すると非常に優れています。ただし、それ以外に、ポインターに置き換えられなかったユースケースは見つかりません。では、関数ポインターの構文糖衣にすぎないのでしょうか?

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

c++ - 任意のポインタ型または基本クラスを関数typedefに渡すことができますか

私はこのコードを持っています

そして、barがClassXの代わりにClassXを拡張するClassYを取得するまでは正常に機能します。

コンパイル時エラーが発生します:main.cpp:22:9:「createCaller」の呼び出しに一致するメンバー関数がありません

問題は、barがClassXまたは任意のクラスを拡張する任意のクラスのパラメーターを取得できるようにするにはどうすればよいですか?それも可能ですか?

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

c++ - 述語のテンプレートの代わりに std::function

多くの標準ライブラリ アルゴリズムは述語関数を取ります。ただし、これらの述語のタイプは、任意のユーザー提供のテンプレート パラメーターです。std::function代わりに、C++11 がこれらが特定の型を取ることを指定しないのはなぜですか? 例えば:

引数の型としてテンプレートの代わりにこれを使用していませんか?