問題タブ [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 投票する
2 に答える
504 参照

c++ - std::functionにキャストされた関数オブジェクトの状態を取得します

関数オブジェクトから状態を取得したい。ただし、関数オブジェクトはfunction<>テンプレートにキャストされています。どうすればいいですか?

つまり:

関数オブジェクト:

主に。私の最初のステップは、オブジェクトを直接使用することです。

そのショー:

コンストラクタ(a)と呼ばれる

10

11

カウンター:12

それは大丈夫です、そしてそれは私が期待したものです。

しかし、

それが示している

コンストラクタ(a)と呼ばれる

10

11

カウンター:10

ああ!、fは実際のオブジェクトのラッパーだと思ったので、変更するfと実際に変更されbます。いいえ:fのコピーがありますがb、呼び出すことができません。f.getCounter()どのようにしてState(counter_ var)を取得できfますか?

Counter同じシグネチャ「void(int)」を持つ他の同様のクラスがいくつかあるため、(この例では)クラスを直接使用することはできません。また、呼び出し元の関数でそれらを不明瞭に使用したいと思います。

すべての関数オブジェクトに共通の基本クラスを使用してテンプレートを完全に回避することはできstd::functionますが、STLとテンプレートを使用したC++11のソリューションがもっとあると思います...

それで、その解決策はありますか?

ありがとう

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

c++ - boost::function を std::function に変換する

同等のブースト機能の代わりに C++11 機能を使用するように、古いコードの一部を更新しています。ただし、順序付けされていないコンテナーやスマート ポインターのように、すべてが単純な名前空間の置き換えであるとは限りません。

たとえば、boost::functionメソッドはempty()ありますclear()が、std::functionありません。

参照を置き換えるために使用してきたoperator()定義済みの定義がありますが、参照を置き換えるには何を使用すればよいですか?std::functionempty()clear()

std::function代入演算子を使用して代入してクリアすることを検討しましたnullptrが、基になる関数だけでなく、オブジェクトを使用できなくするという意図しない副作用があるのではないかと心配しています。

明らかに、より良い解決策は、再利用可能なメンバー関数オブジェクトのデフォルトの初期化です。これにより、ユーザーが提供したもので簡単に更新できる有効なコールバックが常に存在しますが、現在は以前の使用法を直接置き換えることを目指しているだけです。コードレビュー。

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

c++ - ベクトルの任意の要素を削除します> メンバー関数にバインドされている

thisオブジェクトのメンバー関数にバインドされた関数を削除する方法:

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

c++ - C++11可変個引数関数型テンプレートパラメーター

重複の可能性:
「……」トークンの意味は何ですか?

関数型を直接指定する(少なくともテンプレートパラメーターとして)比較的新しい方法があります。これが厳密にC++11であるかどうかはわかりませんが、GCC4.7のSTLヘッダーを読んでいるときに遭遇しました。

こんな感じです:

そして今、ヘッダーファイル<functional>に次のように表示されます。

SomeStructこれは理解できます:戻り型Rと引数の型を持つ関数型の明示的な特殊化A

しかし、この宣言(次の行)を検討してください。

その二重省略記号はどういう意味ですか?

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

c++ - libc++ の std::function コールバック

重複の可能性:
std::function のコピー コンストラクターは、テンプレート型の引数の型が完全な型である必要がありますか?

std::function で構築されたコールバックを持つ単純なクラスがありますが、C++11 / libc++ で構築されていません。エラーが表示されると思いますが、解決策がわかりません。

完全なエラー ログ:

したがって、std::function は完全ではありません。しかし、私はこのクラスがこのクラスへのコールバックへの参照を取得できるようにしたいと考えています。だから私は少しピクルスにいます。C++11でこれを処理する方法を知っている人はいますか?

注: このコードは、使用時に問題なくコンパイルされます<tr1/functional>

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

c++ - weak_ptr へのバインディング

std::weak_ptr に std::bind する方法はありますか? 呼び出し先が破棄されたときに自動的に「切断」する「弱い関数」コールバックを保存したいと思います。

shared_ptr を使用して std::function を作成する方法を知っています。

ただし、返された std::function は、オブジェクトを永久に存続させます。だから私はそれをweak_ptrにバインドしたいと思います:

しかし、それはコンパイルされません。(std::bind は weak_ptr を受け入れません!) weak_ptr にバインドする方法はありますか?

これに関する議論を見つけましたが (以下を参照)、標準的な実装はないようです。特にBoostが利用できない場合、「弱い関数」を保存するための最良の解決策は何ですか?


ディスカッション/調査 (これらはすべて Boost を使用しており、標準化されていません):

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

c++ - '有効な'std:: functionとは何ですか?

ここ:

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool説明:「格納された呼び出し可能オブジェクトが有効かどうかをチェックします」。

おそらくデフォルトで構築されstd::functionたものは有効ではありませんが、これが唯一のケースですか?

また、それが有効かどうかをどのようにチェックしますか?

オブジェクトが無効な場合を正確に発生さoperator()せる場合はありますか?std::bad_function_call

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

c++ - バインディングメンバーは可変個引数で機能します

に格納された可変数のパラメーターを持つメンバー関数がありstd::function、インスタンスをバインドして独立した関数オブジェクトを取得したいと思います。

固定数の引数を使用std::bindしますが、可変個引数パラメーターに対してこれを行う方法がわかりません。

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

c++ - std::関数コピーパラメータ?

私のコード:

コンソールに「コピーされた A」が 2 回表示されます。オブジェクトが 1 回ではなく 2 回コピーされるのはなぜですか? どうすればこれを適切に防ぐことができますか?

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

c++ - テンプレートに基づいたコンストラクターを使用してstd::functionを構築します

std::functionテンプレート引数で定義された型のコンストラクターでを構築することは可能ですか?

例えば: