最終更新日時(UTC):
が更新

履歴 編集

function template
<any>

std::make_any(C++17)

namespace std {
  template <class T, class... Args>
  any make_any(Args&& ...args); // (1)

  template <class T, class U, class... Args>
  any make_any(std::initializer_list<U> il,
               Args&& ...args); // (2)
}

概要

anyオブジェクトを生成するヘルパ関数。

anyのコンストラクタ呼び出しでこの関数と等価のことを行う場合、先頭の引数としてstd::in_place_typeタグを付加する必要があり冗長である。この関数は、その冗長さを回避するためにある。

  • (1) : 任意の型Tのコンストラクタ引数args...をとり、この関数内部でT型オブジェクトを構築して保持するanyオブジェクトを構築する
  • (2) : 任意の型Tのコンストラクタ引数ilargs...をとり、この関数内部でT型オブジェクトを構築して保持するanyオブジェクトを構築する

効果

#include <any>
#include <string>
#include <vector>
#include <cassert>

int main()
{
  // (1)
  {
    // std::string型のオブジェクトを、コンストラクタ引数として3と'z'を渡して構築する
    std::any x = std::make_any<std::string>(3, 'z');
    assert(std::any_cast<std::string>(x) == "zzz");
  }

  // (2)
  {
    std::allocator<int> alloc;
    std::any x = std::make_any<std::vector<int>>({3, 1, 4}, alloc);

    const auto& vec = std::any_cast<const std::vector<int>&>(x);
    assert(vec[0] == 3);
    assert(vec[1] == 1);
    assert(vec[2] == 4);
  }
}

出力

バージョン

言語

  • C++17

処理系