문제

이 사이트를 사용하기 시작한 이후로 Boost 라이브러리에 대한 이야기를 계속 듣게 되었습니다.Boost 라이브러리의 주요 이점(따라서 이를 사용해야 하는 이유)은 무엇이며 Boost 라이브러리의 이식성은 얼마나 되는지 궁금합니다.

도움이 되었습니까?

해결책

부스트는 표준위원회의 여러 회원들이 조직합니다.
따라서 다음 표준에있는 도서관의 번식지입니다.

  1. 그것은 STL로의 확장입니다 (비트가 남은 비트를 채 웁니다)
  2. 잘 문서화되어 있습니다.
  3. 그것은 동료 검토입니다.
  4. 활동이 높아 버그가 발견되고 빠르게 고정됩니다.
  5. 플랫폼 중립이며 어디서나 작동합니다.
  6. 무료로 사용할 수 있습니다.

TR1이 곧 등장함에 따라 Boost는 이미 많은 땅을 덮고 있다는 것을 알게되어 기쁩니다. TR1의 많은 라이브러리는 기본적으로 Boost Originals에서 직접 조정되어 시도 및 테스트되었습니다. 차이점은 그들이 STD :: TR1 네임 스페이스로 옮겨 졌다는 것입니다 (부스트가 아닌).

컴파일러 기본값에 다음을 추가하는 것입니다. 검색 경로를 포함하십시오:

<boost-install-path>/boost/tr1/tr1

그런 다음 표준 헤더 부스트를 포함시킬 때 필요한 모든 항목을 네임 스페이스 STD :: TR1로 자동으로 가져옵니다.

예를 들어:

std :: tr1 :: share_ptr을 사용하려면u003Cmemory> . 이것은 하나의 파일로 모든 스마트 포인터를 제공합니다.

다른 팁

당신은 단순히 읽을 수 있습니다 배경 정보를 향상시킵니다 페이지를 사용하여 부스트를 사용해야하는 이유와 사용할 수있는 항목에 대한 빠른 개요를 얻으십시오. 몇 분이 걸립니다.

휴대용 99%.

부스트가 해결해야 할 필요성을 발견하면 실제로 유용한 라이브러리가 꽤 많다고 말합니다. 직접 코딩하거나 매우 견고한 라이브러리를 사용하십시오. Multi-Index, Lambda, 프로그램 옵션, Regex, SmartPtr 및 Tuple과 같은 물건을위한 Shelve 소스를 벗어나는 것은 놀랍습니다 ...

가장 좋은 점은 다른 라이브러리에 대한 문서를 살펴보고 그것이 당신에게 어떤 용도로 사용할 수 있는지 평가하는 데 시간을 보내는 것입니다.

가치 있는!!

C ++ 0x로 오는 많은 것들을 얻습니다. 그러나 그 일반성 외에도 더 나은 세부 사항 중 일부는 단순합니다. Regex Library, 캐스팅 라이브러리 문자열에서 int까지 캐스팅 (어휘 캐스트) :

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

날짜/시간 라이브러리, 다른 것 중 ...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

또한 a 파이썬 인터페이스 (부스트 파이썬), a Lexer/Parser DSL (부스트 정신) :

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

그리고 그것은 단지 표면을 긁는 것입니다 ...

부스트는 훌륭하지만 Devil 's Advocate를 연주하는 것만으로도 Boost를 사용하고 싶지 않은 이유는 다음과 같습니다.

  • 때로는 오래된 컴파일러에서 올바르게 컴파일/작업하지 못합니다.
  • 종종 템플릿이없는 접근 방식보다 컴파일 시간을 더 많이 증가시킵니다.
  • 일부 부스트 코드는 당신이 생각하는 일을하지 않을 수 있습니다. 문서를 읽으십시오!
  • 템플릿 남용은 읽을 수없는 오류 메시지로 이어질 수 있습니다.
  • 템플릿 남용은 디버거에서 코드를 통과하기가 어려울 수 있습니다.
  • 출혈 가장자리 C ++입니다. 다음 버전의 Boost는 더 이상 현재 (이전) 컴파일러에서 컴파일되지 않을 수 있습니다.

이 모든 것이 부스트 코드를 보지 말고 부스트를 그대로 사용하지 않더라도 스스로 아이디어를 얻지 말아야한다는 의미는 아닙니다.

Boost는 C ++ 라이브러리 모음입니다. 그 중 10 개는 C ++ 0x의 TR1에 포함되어 있습니다.

당신은 할 수 있습니다 여기에서 부스트를 시작하십시오.

후원 휴대 성과 정확성을 강조하는 고품질 동료 검토 C ++ 라이브러리 모음입니다. 그것은 언어와 표준 라이브러리에 새로운 추가 사항을위한 Defacto 증명 근거 역할을합니다. 자세한 내용은 웹 사이트를 확인하십시오.

Boost의 장점 : 널리 사용 가능하며 최신 C ++ 컴파일러 또는 플랫폼에 대해 포트됩니다.
기능은 플랫폼 독립적이며 각 새로운 프레임 워크에 대한 새로운 스레드 디자인을 배울 필요는 없습니다.
그것은 표준 방식으로 파일 시스템과 같은 많은 platfom 특정 기능을 캡슐화합니다.

C ++가 배송해야 할 것입니다! 많은 Java의 인기는 당신이 원하는 모든 것을 많이 할 수있는 표준 라이브러리와 함께 배송되었습니다. 불행히도 C ++는 제한된 C/UNIX 표준 기능 만 상속했습니다.

shared_ptr 그리고 weak_ptr, 특히 멀티 스레드 코드에서는 Boost를 설치할 가치가 있습니다. BOOST_STATIC_ASSERT 컴파일 타임 로직 검사를 수행하는데도 꽤 멋지다.

부스트의 많은 클래스와 유틸리티가 헤더에 있다는 사실은 전혀 컴파일하지 않고도 많은 기능을 얻을 수 있다는 사실도 플러스입니다. 매우 오래된 컴파일러를 사용하지 않는 한 일반적으로 휴대 성은 문제가되지 않습니다. 한 번은 MPL이 VC6과 함께 작동하도록 시도했으며 완전히 폭발하기 전에 4 만 건의 경고/내부 오류를 인쇄했습니다. 그러나 일반적으로 대부분의 라이브러리는 플랫폼이나 컴파일러 공급 업체에 관계없이 작동해야합니다.

Boost의 상당수가 이미 TR1에 있으며 C ++ 표준 라이브러리의 다음 개정에있을 가능성이 높다는 사실을 고려하십시오. 그것은 꽤 큰 보증입니다.

Boost는 거의 모든 애플리케이션에 도움이 될 수 있는 (일반적으로) 일반 구성의 매우 광범위한 라이브러리입니다.이는 C++ 0x 사양에 많은 부스트 ​​구성 요소가 포함되었다는 사실로 알 수 있습니다.

또한 최소한 주요 플랫폼에 걸쳐 이식 가능하며 대부분 표준을 준수하는 C++ 컴파일러를 사용하여 거의 모든 플랫폼에 이식 가능해야 합니다.

유일한 경고는 부스트 라이브러리 간에 많은 종속성이 혼합되어 배포할 특정 구성 요소(전체 부스트 라이브러리 제외)만 선택하기가 더 어려워질 수 있다는 것입니다.

위의 모든 내용과 현대적인 모범 사례 C ++ 기술을 장려합니다. 코드의 품질을 향상시키는 경향이 있습니다.

또한 부스트의 대부분은 템플릿이므로 빌딩이 필요하지 않습니다.
(올바른 헤더 파일 만 포함).

건물이 필요한 몇 가지 부품은 선택 사항입니다.
이것들은 각각 독립적으로 구축 될 수 있으므로 불필요한 코드에 대한 불필요한 부풀어 오릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top