function& operator=(const function& f); // (1)
function& operator=(function&& f); // (2)
function& operator=(nullptr_t); // (3)
template<class F>
function& operator=(F&& f); // (4)
template<class F>
function& operator=(reference_wrapper<F> f) noexcept; // (5)
効果
- (1) :
function(f).swap(*this)
- (2) :
*this
が持つ関数を、f
のそれで置き換える。 - (3) :
*this
が有効な関数ポインタ、メンバポインタ、もしくは関数オブジェクトを持っている場合、それを解放する。 - (4) :
function(std::forward<F>(f)).swap(*this)
- (5) :
function(f).swap(*this)
戻り値
*this
例外
- (5) : 投げない
備考
- (4) :
例
#include <iostream>
#include <functional>
int ident(int x) { return x; }
int main()
{
std::function<int(int)> f;
// 関数を代入
f = ident;
int result = f(1);
std::cout << result << std::endl;
}
出力
1
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.3.6 ✅
- Visual C++: ??
参照
- LWG Issue 2132.
std::function
ambiguity- C++14から、(4)でシグニチャが合わない関数オブジェクトが渡された場合に、SFINAEされるようになった。