흔한 반도의 라이브러리 개발자입니다.
boost 라이브러리 안에 있는 클래스들을 직접 구현해서 사용하고 있는데 그 중 하나 올려봅니다.
클래스는 아래에 올려뒀습니다.
기본적인 컨셉은 boost::any와 같습니다.
any item = 1;
item = "aaaa";
item = 3.0f;
item = 기타 다른 구조체나 클래스같은것들;
등으로 저장이 가능하고
꺼내쓸때도 마찬가지로
int i = item;
string s = item;
float f = item;
의 형식으로 사용가능합니다.
std::vector<any> vecResult;
int i = 1;
vecResult.emplace_back(i);
float f = 3.0f;
vecResult.emplace_back(f);
string s = "Hello World";
vecResult.emplace_back(s);
등의 저장도 당연히 가능합니다.
만약 any 클래스에 저장된 타입과 반환 받은 값의 타입이 틀릴경우 bad_cast exception을 뱉어내니 try catch로 예외처리 해주신후 사용하면 됩니다.
물론 명시적으로 캐스트도 가능한데 2가지 방법이 있습니다.
1. item.cast<std::string>();
2. item.as<std::string>();
혹시 필요하신분은 가져가서 사용하셔도 됩니다.ㄷㄷ
현재 dynamic_cast를 이용하여 성능상의 이슈가 있을 수도 있는데 더 좋은 방법 아시는 분은 추천 부탁드리겠습니다..ㄷㄷ
제 머리로는 이게 한계네요..ㅠㅠ