BOOST_FOREACH 의 경우 boost 1.34.0 부터 정식으로 들어간 라이브러리 입니다. 본 문서는 boost 1.40.0 기준으로 작성 되었습니다.
BOOST_FOREACH 에 대한 메뉴얼은 다음의 링크에서 확인 할 수 있습니다.
http://www.boost.org/doc/libs/1_40_0/doc/html/foreach.html
BOOST_FOREACH 란?
C++ 에서 반복자로 정해진 구역을 기존의 방식보다 편하게 훑기 위해서 만들어진 라이브러리 입니다. 기존의 방식으로는 for 문, std::for_each 가 대표적인데, 사용방법이 귀찮거나, 소스관리가 어려운 단점이 있었기에, 사용 할 때 많은 신경을 써야 했습니다.
1. for문으로 iterator를 만들어 훑기
단점
일단 iterator 에 대한 어느정도 지식이 있어야 합니다. for문의 비교 구문, 후처리 구역에서의 전위 연산자 사용, 선언구역에서 iterator 타입 정의을 반드시 알고 있어야 합니다. 그래서 실수 할 일이 더 많아집니다.
장점
물론 "훑는" 개념 중에서 단연, 최고의 성능을 발휘 합니다. 또한 코드가 바로 다음에 있어, 어떤 일을 하는지 바로 볼 수 있어 좋습니다.
2. std::for_each()를 이용하여 훑기
단점
Pr() 즉, 함수자(or 함수객체)를 따로 빼어야 한다는 단점이 있습니다.(물론 람다를 사용 할 수 있으나, 그 문제는 논외이므로 고려하지 않습니다.). 실질적으로 연산하는 코드가 멀리 떨어짐에 따라 가독성이 좀 좋지 않습니다.
장점
좀 더 구조화가 가능해지고, 실수할 일이 더 적어 집니다.
기존의 방법들은 이러한 장/단점을 가지고 있었고, 사용시 항상 지루하고 귀찮은 작업을 프로그래머가 신경썼어야만 했습니다.
BOOST_FOREACH 는 이러한 단점들을 보안하여, C++에서 "훑기"를 보다 쉽고 효과적으로 할 수 있게 도와 줍니다.
어디에 사용 될 수 있는가?
Boost.Ragne로 iterator를 뽑아 낼 수 있다면, 그 어떠한 것이라도 돌릴 수 있습니다. 예를 들어서
- STL containers
- arrays
- boost::array<T>
- Null-terminated strings (char and wchar_t)
- std:pair of iterator <-- 이 부분에 대해서는 2부에서 다루겠습니다.
이러한 것들에 사용 될 수 있습니다. 역시 말로만 하면 가물가물하니, 어떻게 사용하는지 자세히 알아 봅시다.
보다 자세한건, 링크로 대체하겠습니다.
- http://naiades.tistory.com/57 <-- map 사용법 설명
- http://blog.daum.net/_blog/BlogView.do?blogid=0Idq4&articleno=8429376 <-- 메뉴얼 중 기본 부분 번역
- http://www.gpgstudy.com/gpgiki/BoostForeach <-- 대부분의 번역문
이 정도까지가 찾은 것이고, 2부에서는 이보다 더 활용 하는 방법에 대해서 다루겠습니다.
'연구실 > Boost.org' 카테고리의 다른 글
Boost.Foreach : 부스트 포이치, BOOST_FOREACH, 2부 (191) | 2009.10.29 |
---|---|
boost::scope exit, BOOST_SCOPE_EXIT (0) | 2009.10.23 |
Boost.Bind - 파트 3 ( bind 성능 테스트 ) (4) | 2008.11.26 |
Boost.Bind - 파트 2 (함수 오브젝트 bind 하기 ) (0) | 2008.11.04 |
boost.bind - 파트 1 (1) | 2008.11.03 |
Boost 는.. (0) | 2008.11.03 |
최근댓글