• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <any>

    std::make_any

    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

    処理系