다음을 통해 공유


in_place_t, in_place_type_t구조 in_place_index_t

C++17에 도입되었습니다.

in_place_t, in_place_type_tin_place_index_t 태그 형식은 원하는 방식으로 개체를 만드는 오버로드된 생성자를 선택하는 데 사용됩니다. 이러한 태그 형식을 사용하는 형식의 경우 임시 복사 또는 이동 작업을 방지하는 데도 도움이 될 수 있습니다.

구문

struct in_place_t
{
    explicit in_place_t() = default;
};

inline constexpr in_place_t in_place{};

template <class T>
struct in_place_type_t
{
    explicit in_place_type_t() = default;
};

template <class T>
constexpr in_place_type_t<T> in_place_type{};

template <size_t I>
struct in_place_index_t
{
    explicit in_place_index_t() = default;
};

template <size_t I>
constexpr in_place_index_t<I> in_place_index{};

매개 변수

I
개체가 만들어지는 인덱스입니다.

T
만들 개체의 형식입니다.

설명

  • in_place_t 는 개체의 현재 위치 생성을 나타냅니다. 에 있는 std::optional개체를 만드는 데 사용됩니다.
  • in_place_type_t 는 특정 형식의 개체의 현재 위치 생성을 나타냅니다. 모든 종류의 형식을 std::any 보유할 수 있으므로 std::any 보유하는 형식을 지정해야 하므로 유용합니다.
  • in_place_index_t 는 특정 인덱스에서 개체의 현재 위치 생성을 나타냅니다. 개체 std::variant 가 만들어지는 인덱스 지정에 사용합니다.

다음 클래스 형식은 해당 생성자 expectedany optionalsingle_viewvariant에서 이러한 구조체를 사용합니다.

예시

#include <iostream>
#include <optional>
#include <any>
#include <variant>

// compile with /std:c++17

struct MyStruct
{
    double value;
    MyStruct(double v0, double v1 = 0) : value(v0 + v1) {}
};

int main()
{
    // Construct a MyStruct directly inside opt
    std::optional<MyStruct> opt(std::in_place, 29.0, 13.0);

    // Construct a MyStruct object inside an any object
    std::any a(std::in_place_type<MyStruct>, 3.14);

    // Construct a MyStruct object inside a vector at index 0
    std::variant<MyStruct, int> v(std::in_place_index<0>, 2.718);

    if (opt)
    {
        std::cout << opt->value << ", ";
    }

    std::cout << std::any_cast<MyStruct>(a).value << ", "
              << std::get<0>(v).value;

    return 0;
}
42, 3.14, 2.718

요구 사항

머리글: <utility>

네임스페이스: std

컴파일러 옵션: /std:c++17 이상