問題タブ [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にキャストされた関数オブジェクトの状態を取得します
関数オブジェクトから状態を取得したい。ただし、関数オブジェクトは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のソリューションがもっとあると思います...
それで、その解決策はありますか?
ありがとう
c++ - boost::function を std::function に変換する
同等のブースト機能の代わりに C++11 機能を使用するように、古いコードの一部を更新しています。ただし、順序付けされていないコンテナーやスマート ポインターのように、すべてが単純な名前空間の置き換えであるとは限りません。
たとえば、boost::function
メソッドはempty()
ありますclear()
が、std::function
ありません。
参照を置き換えるために使用してきたoperator()
定義済みの定義がありますが、参照を置き換えるには何を使用すればよいですか?std::function
empty()
clear()
std::function
代入演算子を使用して代入してクリアすることを検討しましたnullptr
が、基になる関数だけでなく、オブジェクトを使用できなくするという意図しない副作用があるのではないかと心配しています。
明らかに、より良い解決策は、再利用可能なメンバー関数オブジェクトのデフォルトの初期化です。これにより、ユーザーが提供したもので簡単に更新できる有効なコールバックが常に存在しますが、現在は以前の使用法を直接置き換えることを目指しているだけです。コードレビュー。
c++ - ベクトルの任意の要素を削除します> メンバー関数にバインドされている
this
オブジェクトのメンバー関数にバインドされた関数を削除する方法:
c++ - C++11可変個引数関数型テンプレートパラメーター
重複の可能性:
「……」トークンの意味は何ですか?
関数型を直接指定する(少なくともテンプレートパラメーターとして)比較的新しい方法があります。これが厳密にC++11であるかどうかはわかりませんが、GCC4.7のSTLヘッダーを読んでいるときに遭遇しました。
こんな感じです:
そして今、ヘッダーファイル<functional>
に次のように表示されます。
SomeStruct
これは理解できます:戻り型R
と引数の型を持つ関数型の明示的な特殊化A
。
しかし、この宣言(次の行)を検討してください。
その二重省略記号はどういう意味ですか?
c++ - libc++ の std::function コールバック
重複の可能性:
std::function のコピー コンストラクターは、テンプレート型の引数の型が完全な型である必要がありますか?
std::function で構築されたコールバックを持つ単純なクラスがありますが、C++11 / libc++ で構築されていません。エラーが表示されると思いますが、解決策がわかりません。
完全なエラー ログ:
したがって、std::function は完全ではありません。しかし、私はこのクラスがこのクラスへのコールバックへの参照を取得できるようにしたいと考えています。だから私は少しピクルスにいます。C++11でこれを処理する方法を知っている人はいますか?
注: このコードは、使用時に問題なくコンパイルされます<tr1/functional>
c++ - weak_ptr へのバインディング
std::weak_ptr に std::bind する方法はありますか? 呼び出し先が破棄されたときに自動的に「切断」する「弱い関数」コールバックを保存したいと思います。
shared_ptr を使用して std::function を作成する方法を知っています。
ただし、返された std::function は、オブジェクトを永久に存続させます。だから私はそれをweak_ptrにバインドしたいと思います:
しかし、それはコンパイルされません。(std::bind は weak_ptr を受け入れません!) weak_ptr にバインドする方法はありますか?
これに関する議論を見つけましたが (以下を参照)、標準的な実装はないようです。特にBoostが利用できない場合、「弱い関数」を保存するための最良の解決策は何ですか?
ディスカッション/調査 (これらはすべて Boost を使用しており、標準化されていません):
- 弱関数
- weak_ptr バインディング
- 「弱い」バインディング(およびその修正)
- 弱い_fn
- 別のweak_fn
c++ - '有効な'std:: functionとは何ですか?
ここ:
http://en.cppreference.com/w/cpp/utility/functional/function
operator bool
説明:「格納された呼び出し可能オブジェクトが有効かどうかをチェックします」。
おそらくデフォルトで構築されstd::function
たものは有効ではありませんが、これが唯一のケースですか?
また、それが有効かどうかをどのようにチェックしますか?
オブジェクトが無効な場合を正確に発生さoperator()
せる場合はありますか?std::bad_function_call
c++ - バインディングメンバーは可変個引数で機能します
に格納された可変数のパラメーターを持つメンバー関数がありstd::function
、インスタンスをバインドして独立した関数オブジェクトを取得したいと思います。
固定数の引数を使用std::bind
しますが、可変個引数パラメーターに対してこれを行う方法がわかりません。
c++ - std::関数コピーパラメータ?
私のコード:
コンソールに「コピーされた A」が 2 回表示されます。オブジェクトが 1 回ではなく 2 回コピーされるのはなぜですか? どうすればこれを適切に防ぐことができますか?
c++ - テンプレートに基づいたコンストラクターを使用してstd::functionを構築します
std::function
テンプレート引数で定義された型のコンストラクターでを構築することは可能ですか?
例えば: