最終更新日時: 2025年07月09日 00時33分39秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<functional>

# std::function::assign(C++11)(C++17で削除)

    template <class F, class Alloc>
    void assign(F&& f, const Alloc& alloc);

この機能は、C++17で削除された。このクラスでメモリアロケータを使用する必要はない。

## 概要

関数オブジェクトとアロケータを再代入する。

## 効果

    function(allocator_arg, alloc, std::forward<F>(f)).swap(*this)

## 戻り値

なし

## 例

    #include <iostream>
    #include <functional>

    int ident(int x) { return x; }

    int main()
    {
      std::function<int(int)> f;

      // 関数とアロケータを代入。
      //
      // ※ここではint型を対象とするアロケータを渡しているが、
      // 内部で適切な関数の型にrebindして使われる。
      f.assign(ident, std::allocator<int>());

      int result = f(1);
      std::cout << result << std::endl;
    }

### 出力

    1

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.0 ✅
- GCC: 4.8.2 ❌
- Visual C++: ??

## 参照

- N2308 Adding allocator support to `std::function` for C++0x
- P0302R1 Removing Allocator Support in `std::function` (rev 1)
- LWG Issue 2385. `function::assign` allocator argument doesn't make sense