2009.10.28 21:49 연구실/Boost.org

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부에서 다루겠습니다.

이러한 것들에 사용 될 수 있습니다. 역시 말로만 하면 가물가물하니, 어떻게 사용하는지 자세히 알아 봅시다.


보다 자세한건, 링크로 대체하겠습니다.

  1. http://naiades.tistory.com/57 <-- map 사용법 설명
  2. http://blog.daum.net/_blog/BlogView.do?blogid=0Idq4&articleno=8429376 <-- 메뉴얼 중 기본 부분 번역
  3. http://www.gpgstudy.com/gpgiki/BoostForeach <-- 대부분의 번역문

이 정도까지가 찾은 것이고, 2부에서는 이보다 더 활용 하는 방법에 대해서 다루겠습니다.

저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. 케터피 2012.10.25 12:38 신고  Addr  Edit/Del  Reply

    좋은 정보 감사합니다 실례지만 사용하는 폰트이름 좀 알수 있을까요? 모양이 정말 맘에 들어서요