본문 바로가기
서적 정리/Effective C++

55.Boo子有親! 부스트를 늘 여러분 가까이에

by 민돌이2 2022. 1. 3.

부스트(Boost) 이름은 자주 들어봐서 익숙한 이름이다. 실제로 사용해본적은 없다.

부스트는 C++ 개발자들의 단체이자 무료로 다운로드가 가능한 C++ 라이브러리 집항르 동시에 일컫는 고유명사이다. 

http://boost.org에 있다.

 

 

boost 라이브러리

부스트의 라이브러리는 십수 개의 범주로 나뉘어 있다. 대표적인 몇개를 적어본다.

1.문자열 및 텍스트 처리

주요 구성요소로 타입 안전성을 갖춘 printf 비슷한 서식화 기능, 정규 표현식 및 토큰화와 구문분석 기능이 있다.

TR1에 있는 정규 표현식이 여기서 나왔다(54장 참고).

 

2.컨테이너

STL 양식의 인터페이스를 제공하는 고정 크기 배열(54장 참고), 가변 크기 비트세트, 다차원 배열 등이 포함되어 있다.

 

3.함수 객체 및 고차(higher-order) 프로그래밍

TR1의 기능을 구현하는 데 사용된 몇 개의 기반 라이브러리가 여기에 해당된다. 대표적으로 람다(Lambda) 라이브러리가 있는데, 별도의 준비 없이 즉석에서 함수 객체를 생성해 주는 기능이다.

using namespace boost::lambda; //boost::lambda의 기능을 사용 가능하도록

std:;vector<int> v;
//v안에 들어 있는 각각의 원소 x에 대해 x * 2 + 10을 출력한다.
//_1은 Lambda 라이브러리에서 사용하는 현재 원소를 뜻하는 자리채움자이다.
std::for_each(v.begin(), v.end(), std::cout << _1 * 2 + 10 << std::endl);

 

4.일반화 프로그래밍

특성정보(traits) 클래스를 사용할 수 있다(47장 참고).

 

5.템플릿 메타프로그래밍(TMP)

컴파일 타임 단정문, 부스트 MPL 라이브러리 등이 여기에 포함된다. MPL에는 타입 등의 컴파일 타임 개체를 STL스러운 자료구조로 관리할 수 있도록 지원하는 장점이 있다.

//세 개의 타입(float, double, long double)을 담는 컴파일 타임
//컨테이너를 list와 비슷하게 만들고, 이것을 floats라고 부른다.
typedef boost::mpl::list<float, double, long double> floats;

//기존의 floats에 들어 있는 타입 집합은 물론이고 그 집합의 앞에 int가 삽입된
//새로운 타입 리스트를 만들고, 이것을 types라고 부른다.
typedef boost::mpl::push_front<floats, int>::type types;

 

6.수학 및 수치 조작

유리수, 4원수(quaternion) 및 8원수(octonion), 최대 공약수 및 최소 공배수, 난수 등이 포함된다.

 

7.정확성 유지 및 테스트

암시적 템플릿 인터페이스(41장 참고)를 형식화해 주는 라이브러리와 테스트 우선 프로그래밍을 가능하게 해 주는 라이브러리가 있다.

 

8.자료구조

타입 안전성을 갖춘 공용체, TR1에서 지원하는 것의 뿌리격인 투플(Tuple) 라이브러리(54장 참고)가 이 범주에 들어간다.

 

9.타 언어와의 연동 지원

C++와 파이썬 사이의 걸림돌 없는 상호운용을 가능하게 하는 라이브러도 지원한다.

 

10.메모리

고성능의 고정 크기 할당자를 지원한느 풀(Pool) 라이브러리(50장 참고) TR1에도 일부 포함된 스마트 포인터(13장 참고)가 이 범주에 들어간다. TR1에 속하지 않은 스마트 포인터중 하나가 scoped_array이다. 동적으로 할당된 배열에 대해 동작으로 auto_ptr 같은 스마트 포인터라고 생각하면 된다(44장 참고).

 

11.기타

CRC 점검, 날짜 및 시간 조작, 파일 시스템 횡단 등을 지원하는 라이브러리가 주요 구성요소이다.

 

 

부제목

부스트는 동료 심사를 거쳐 등록되고 무료로 배포되는 오픈 소스 C++ 라이브러리를 개발하는 모임이자 웹사이트이다. 또한 C++ 표준화에 있어서 영향력 있는 역할을 맡고 있다.

부스트에서 배포되는 라이브러리들 중엔 TR1 구성요소에 들어간 것도 있지만, 그외에 다른 라이브러리들도 많다.

728x90

댓글