대다수란 표현은 침묵하고 있는 사람들을 내 편이라고 주장하기 위해 쓰이고, 일부라는 말은 감추기에는 너무 많기에 도저히 감추지 못할 경우 마지못해 인정할 때 쓰인다. -- kids의 staire 님 글 중에서
[[Include(분류/Cpp)]]
- 메인 링크 :
http://www.boost.org/doc/html/any.html
- 이번 프로젝트에 한번 사용해보았는데... 사용법을 정리해보았습니다.
1 개요 #
sqlite이나 다른 스크립트들을 보면 굳이 타입선언을 하지 않고 그냥 배열이나 자료구조를 선언하는 것을 볼 수 있습니다. 효율성은 둘째치고 짜는 사람입장에서 정말 편하죠.
C++만큼 데이타타입을 엄격히 따지는 언어도 드문 까닭에(const만 빼먹어도 에러가...) 루아나 기타 다른 스크립트와 혼용할 경우 참 깝깝할 때가 많습니다. 예를 들어, vector<>를 하나 선언하고 싶은데 내부 요소들의 데이타 타입이 int, long, float 중 하나가 되게 하고 싶을 경우가 대표적인 예지요. 이것을 가능하게 해주는 것이 any 클래스입니다. 컨테이너이기 때문에 아무래도 단일 데이타 타입 그대로 쓰는 것보다는 효율성이 떨어지지만 융통성있는 코드를 요구할 때 매우 유용하게 써먹을 수 있습니다.
C++만큼 데이타타입을 엄격히 따지는 언어도 드문 까닭에(const만 빼먹어도 에러가...) 루아나 기타 다른 스크립트와 혼용할 경우 참 깝깝할 때가 많습니다. 예를 들어, vector<>를 하나 선언하고 싶은데 내부 요소들의 데이타 타입이 int, long, float 중 하나가 되게 하고 싶을 경우가 대표적인 예지요. 이것을 가능하게 해주는 것이 any 클래스입니다. 컨테이너이기 때문에 아무래도 단일 데이타 타입 그대로 쓰는 것보다는 효율성이 떨어지지만 융통성있는 코드를 요구할 때 매우 유용하게 써먹을 수 있습니다.
2 선언하는 방법 #
#include <boost/any.hpp> ... boost::any value_; // 그냥 빈 값을 하나 생성합니다. boost::any value_int_(16); // 16이란 값을 담고 내부 데이타 타입을 int로 설정합니다.
3 값을 대입하는 방법 #
boost::any value_;
value_ = 14; // 정수형 대입
value_ = 5.67f; // 실수형 대입
value_ = string("테스트"); //문자열 대입
이때 주의해야할 점은 문자열로서 char * 타입은 안된다는 점입니다. any 역시 컨테이너이기 때문에 STL 컨테이너 요건(복사생성자존재, 대입연산자오버로딩존재)과 원래 데이타타입의 소멸에 있어서 예외를 던지지 말 것을 충족해야합니다.









