http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4562.html#any 이번엔 C++이 구분된 유형의 객체에 대한 작업을 수행할 수 있는 std::any에 대해 설명합니다. std::any 객체는 아무 형식의 값을 담을 수 있는 객체입니다. 대신 복사 가능한 ( copyable ) 형식이여야 합니다. 식별된 형식은 다른 형식의 값을 포함할 순 있지만 형식간의 변환을 시도하진 않습니다. 즉 5는 int 타입으로 엄격하게 유지되며, 암시적으로 "5" 또는 5.0으로 변환될 수 없습니다. 형식에 대해서는 무관심하지만, 단일 값을 안전하고 일반적인 컨테이너에서 효과적으로 허용하며 모호환 변환 (암시적인 변환) 을 막아줍니다.
비 멤버 any_cast 함수는 포함 된 객체에 대한 유형 안전 접근을 제공합니다.
만약 oprand.type() != typeid(remove_reference_t<valuetype>) 일 경우, bad_any_cast 형식의 예외를 던집니다.
any_cast가 pointer일때, any에 담긴 피연산자가 any_cast에 접근가능하다면 그 포인터가, 접근불가라면 nullptr을 반환합니다.
any 는 빈 객체로 생성될 수 있으며, optional 처럼 멤버 함수 has_value, emplace, reset, type을 가지고 있습니다. type은 any 객체에 담긴 형식을 나타내는 type_info 객체의 참조(reference) 를 반환합니다. 빈 any 객체의 경우 type_info 는 void 입니다. ( type_info(void) )
|
'C++ > Modern' 카테고리의 다른 글
C++20) Designated Initializer ( 지정된 초기화 ) (0) | 2020.08.19 |
---|---|
C++17) std::variant (0) | 2019.02.28 |
C++17) std::optional (0) | 2019.02.27 |
C++17) std::string_view (0) | 2019.02.26 |
C++17) if문과 switch문에서의 초기화 (0) | 2019.02.23 |