Namespaces
Variants

std::any

cppreference.net에서 발췌
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
교체 및 형식 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 형식
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <any>
class any;
(C++17부터)에 정의됨

클래스 any는 모든 복사 생성 가능 형식의 단일 값에 대한 형식 안전 컨테이너를 나타냅니다.

1) 클래스 any의 객체는 생성자 요구 사항을 충족하거나 비어 있는 모든 형식의 인스턴스를 저장하며, 이를 클래스 객체의 상태라고 합니다. 저장된 인스턴스를 포함된 객체라고 합니다. 두 상태는 둘 다 비어 있거나 둘 다 비어 있지 않고 포함된 객체가 동일한 경우 동일합니다.any2)
비멤버 함수는 포함된 객체에 대한 형식 안전 접근을 제공합니다.any_cast구현은 작은 객체에 대해 동적 할당을 피하는 것이 권장되지만, 이러한 최적화는

std::is_nothrow_move_constructible이 truetrue를 반환하는 형식에만 적용될 수 있습니다.

멤버 함수

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)
값 의미론을 가진 동적 할당 객체를 포함하는 래퍼
(클래스 템플릿)
값 의미론을 가진 동적 할당 객체를 포함하는 다형적 래퍼
(클래스 템플릿)