std:: any
From cppreference.net
|
헤더에 정의됨
<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) |
|
비멤버 함수
|
(C++17)
|
std::swap
알고리즘을 특수화함
(함수) |
|
(C++17)
|
포함된 객체에 대한 타입 안전 접근
(함수 템플릿) |
|
(C++17)
|
any
객체를 생성함
(함수 템플릿) |
헬퍼 클래스
|
(C++17)
|
타입 불일치 시
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++23)
|
주어진 호출 시그니처에서 한정자를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼
(클래스 템플릿) |
|
(C++17)
|
타입 안전 식별 공용체
(클래스 템플릿) |
|
(C++17)
|
객체를 보유할 수도 있고 보유하지 않을 수도 있는 래퍼
(클래스 템플릿) |
|
(C++11)
|
고유 객체 소유권 의미론을 가진 스마트 포인터
(클래스 템플릿) |
|
(C++26)
|
값 의미론을 가진 동적 할당 객체를 포함하는 래퍼
(클래스 템플릿) |
|
(C++26)
|
값 의미론을 가진 동적 할당 객체를 포함하는 다형적 래퍼
(클래스 템플릿) |