std::any
2023. 1. 8. 12:36ㆍProgramming/JAVA, C++, Go, Rust
- 목차
반응형
std::any
C++에서 std::any는 어떠한 type의 값이라도 상관없이 저장할 수 있도록 만든 template class type의 변수 입니다.
C++17부터 지원하기 시작했으며, 이제 이를 사용하면 기존에 variant type을 만들어서 사용하던 수고를 덜 수 있습니다. (많은 C++ project에서 variant type을 만들었었고, Qt와 같은 framework에서도 variant type을 지원하곤 했죠)
사용 방법
std::any는 간단히 사용할 수 있습니다.
먼저 any라는 헤더 파일을 include 합니다.
이후 다음과 같이 변수를 선언합니다.
std::any val;
std::cout<<(val.has_value() ? "has value" : "no value")<<std::endl;
//std::cout<<val.type().name<<std::endl;
val = std::string("test");
std::cout<<(val.has_value() ? "has value" : "no value")<<std::endl;
auto type_name = val.type().name();
std::cout<<"type: "<<type_name<<"\n";
val.reset();
std::cout<<(val.has_value() ? "has value" : "no value")<<std::endl;
std::any val3 = std::make_any<std::string>("test2");
std::string strval3 = std::any_cast<std::string>(val3);
std::cout<<strval3<<std::endl;
std::any val;
이런식으로 비어있는 any type의 변수를 선언할 수 있습니다.
그러나 다음과 같이 make_any를 사용하는 것을 권장합니다.
std::any val = std::make_any<std::string>("value");
값 유무 check
any 변수가 값을 지니고 있는지 여부를 확인하려면, has_value 메소들 사용합니다.
if (true == val.has_value()) {
... has value...
}
값을 가지고 있지 않을 때 값을 가져오는 연산을 수행하면 exception이 발생합니다.
값이 있는 것을 확인 한 후, value 메소드를 사용해 값을 가져옵니다.
std::string str_val = val.value();
반응형
'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글
unordered_map vs. map (0) | 2023.01.25 |
---|---|
std::copy (0) | 2023.01.13 |
C++: set 사용하기 (0) | 2022.10.08 |
C++ set 사용법 (0) | 2022.10.08 |
C++ file path (파일 경로) 획득 방법 (0) | 2022.10.04 |