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