Namespaces
Variants

std:: any

From cppreference.net
Utilities library
헤더에 정의됨 <any>
class any ;
(C++17부터)

any 클래스는 모든 복사 생성 가능한 타입의 단일 값을 위한 타입 안전 컨테이너를 설명합니다.

1) any 클래스의 객체는 생성자 요구 사항을 만족하는 모든 타입의 인스턴스를 저장하거나 비어 있을 수 있으며, 이를 any 클래스 객체의 상태 라고 부릅니다. 저장된 인스턴스를 포함된 객체라고 합니다. 두 상태는 모두 비어 있거나, 모두 비어 있지 않으면서 포함된 객체가 동등할 경우 동등하다고 간주합니다.
2) 비멤버 any_cast 함수들은 포함된 객체에 대한 타입 안전 접근을 제공합니다.

일반적으로 구현체들은 std::is_nothrow_move_constructible true 인 타입들에 대해 small objects optimization(동적 할당 회피)을 적용합니다.

목차

멤버 함수

any 객체를 생성합니다
(public member function)
any 객체를 할당합니다
(public member function)
any 객체를 소멸시킵니다
(public member function)
Modifiers
포함된 객체를 변경하며, 새로운 객체를 직접 생성합니다
(public member function)
포함된 객체를 소멸시킵니다
(public member function)
두 개의 any 객체를 교환합니다
(public member function)
Observers
객체가 값을 보유하고 있는지 확인합니다
(public member function)
포함된 값의 typeid 를 반환합니다
(public member function)

비멤버 함수

std::swap 알고리즘을 특수화함
(함수)
(C++17)
포함된 객체에 대한 타입 안전 접근
(함수 템플릿)
(C++17)
any 객체를 생성함
(함수 템플릿)

헬퍼 클래스

타입 불일치 시 any_cast 의 값 반환 형식에서 발생하는 예외
(클래스)

참고 사항

Feature-test 매크로 표준 기능
__cpp_lib_any 201606L (C++17) std::any

예제

#include <any>
#include <iostream>
int main()
{
    std::cout << std::boolalpha;
    // 모든 타입
    std::any a = 1;
    std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';
    a = 3.14;
    std::cout << a.type().name() << ": " << std::any_cast<double>(a) << '\n';
    a = true;
    std::cout << a.type().name() << ": " << std::any_cast<bool>(a) << '\n';
    // 잘못된 캐스트
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }
    // 값 존재 여부
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';
    // 초기화
    a.reset();
    if (!a.has_value())
        std::cout << "값 없음\n";
    // 포함된 데이터에 대한 포인터
    a = 3;
    int* i = std::any_cast<int>(&a);
    std::cout << *i << '\n';
}

가능한 출력:

int: 1
double: 3.14
bool: true
bad any_cast
int: 2
no value
3

참고 항목

(C++11)
복사 생성 가능한 모든 호출 가능 객체의 복사 가능 래퍼
(클래스 템플릿)
주어진 호출 시그니처에서 한정자를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼
(클래스 템플릿)
(C++17)
타입 안전 식별 공용체
(클래스 템플릿)
(C++17)
객체를 보유할 수도 있고 보유하지 않을 수도 있는 래퍼
(클래스 템플릿)
(C++11)
고유 객체 소유권 의미론을 가진 스마트 포인터
(클래스 템플릿)
(C++26)
값 의미론을 가진 동적 할당 객체를 포함하는 래퍼
(클래스 템플릿)
값 의미론을 가진 동적 할당 객체를 포함하는 다형적 래퍼
(클래스 템플릿)