utility_any

utility_any (타입 안전 단일 값 컨테이너)

이 페이지는 C++17에서 도입된 std::any 클래스에 대해 설명해요. std::any는 복사 생성 가능한 모든 타입의 단일 값을 타입 안전하게 보관할 수 있는 컨테이너예요. 작은 객체에 대해 동적 할당을 피하도록 구현하는 것이 권장되지만, 이 최적화는 std::is_nothrow_move_constructibletrue를 반환하는 타입에만 적용될 수 있어요.

출처: cppreference

본문

std::any는 임의의 복사 생성 가능한 타입의 값을 보관하는 타입 안전 컨테이너예요. 보관된 값의 타입은 실행 중에 type() 멤버 함수와 any_cast를 통해 확인하고 접근할 수 있어요.

멤버 함수

(constructor) any 객체를 생성해요 (공개 멤버 함수) [편집]
operator= any 객체를 할당해요 (공개 멤버 함수) [편집]
(destructor) any 객체를 소멸해요 (공개 멤버 함수) [편집]
수정자
emplace 포함된 객체를 변경하고 새 객체를 직접 생성해요 (공개 멤버 함수) [편집]
reset 포함된 객체를 파괴해요 (공개 멤버 함수) [편집]
swap 두 any 객체를 교환해요 (공개 멤버 함수) [편집]
관찰자
has_value 객체가 값을 보관하고 있는지 확인해요 (공개 멤버 함수) [편집]
type 포함된 값의 typeid를 반환해요 (공개 멤버 함수) [편집]

비멤버 함수

std::swap (std::any) (C++17) std::swap 알고리즘을 특수화해요 (함수) [편집]
any_cast (C++17) 포함된 객체에 타입 안전하게 접근해요 (함수 템플릿) [편집]
make_any (C++17) any 객체를 생성해요 (함수 템플릿) [편집]

헬퍼 클래스

bad_any_cast (C++17) 타입 불일치 시 any_cast의 값을 반환하는 형태에서 던져지는 예외예요 (클래스) [편집]

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_any 201606L (C++17) std::any

예제

#include <any>
#include <iostream>

int main()
{
    std::cout << std::boolalpha;

    // any type
    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';

    // bad cast
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }

    // has value
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';

    // reset
    a.reset();
    if (!a.has_value())
        std::cout << "no value\n";

    // pointer to contained data
    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

같이 보기

function (C++11) 복사 생성 가능한 모든 호출 가능 객체를 감싸는 복사 가능 래퍼예요 (클래스 템플릿) [편집]
move_only_function (C++23) 주어진 호출 시그니처에서 한정자를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼예요 (클래스 템플릿) [편집]
variant (C++17) 타입 안전한 차별화된 공용체예요 (클래스 템플릿) [편집]
optional (C++17) 객체를 보관할 수도 있고 보관하지 않을 수도 있는 래퍼예요 (클래스 템플릿) [편집]
unique_ptr (C++11) 고유한 객체 소유권 의미를 가진 스마트 포인터예요 (클래스 템플릿) [편집]
indirect (C++26) 값과 유사한 의미를 가진 동적 할당 객체를 포함하는 래퍼예요 (클래스 템플릿) [편집]
polymorphic (C++26) 값과 유사한 의미를 가진 동적 할당 객체를 포함하는 다형성 래퍼예요 (클래스 템플릿) [편집]

더 알아보기 (Learn more)

cppreference