-
다양한 데이터 타입의 변수. boost::variant프로그래밍/c++ 2015. 11. 2. 11:12반응형
boost::variant는 템플릿 파라미터로 명시된 타입들 중 하나를 데이터로 가질 수 있는 클래스이다.
한마디로 업그레이드 된 union. 힙을 사용하지도 않고, RTTI도 이용하지 않아 좋은 성능을 보여준다.
간단한 사용 예
boost::variant<int, std::string, float> var; // int, std::string, float 타입들을 담을 수 있는 변수.
var = "Hello";
var = 0;
var = 1.0f;
값을 읽어오는 방법
template<typename T> boost::get<T> 를 사용한다. 잘못된 변환을 하려고 한다면? boost::bad_get 예외를 던진다.
boost::get<std::string>(var); // std::string 타입으로 읽는다.
boost::get<std::vector<int>>(var); // 잘못된 코드! boost::bad_get 예외가 발생한다.
타입의 조사
which()를 통해 알 수 있다. 0, 1, 2 따위의 정수값 하나가 반환되는데 이 값은, 템플릿 파라미터 중 n번째의 있는 타입으로 설정이 되어있다. 라는 걸 의미한다.
auto witch = var.which();
if(witch == 0)
{// int형으로 지정이 되어있군!
}
else if(witch == 1)
{// std::string 형으로 지정이 되어있군!
}심화된 사용
방문자(visitor) 패턴 이용하여 좀 더 제네릭한 코드를 만들 수 있다.
http://coderhyme.tistory.com/3
반응형'프로그래밍 > c++' 카테고리의 다른 글
std::map insert, emplace, try_emplace (0) 2015.11.06 boost::uuids::uuid를 std::unordered_map과 사용하기 (0) 2015.11.05 std::bind 사용 예제 (0) 2015.10.25 unique_ptr 캐스팅 std::unique_ptr<Derived> => std::unique_ptr<Base> (0) 2015.10.18 C++11 람다를 보다 깔끔하게 쓰는 방법 (0) 2015.09.19