어떤 Boost 기능이 C ++ 11과 겹치나요?


192

몇 년 전 C ++ 기술을 선반에 올려 놓았는데 이제 다시 필요할 때 풍경이 바뀌는 것 같습니다.

우리는 지금 C ++ 11을 가지고 있으며, 많은 Boost 기능과 겹친다는 것을 이해합니다.

겹치는 부분이 어디에 있는지, 어떤 부스트 라이브러리가 레거시가 될지, 부스트 기능 대신 어떤 C ++ 11 기능을 사용하고 어떤 것이 더 좋지 않은지 추천하는 요약이 있습니까?


4
Boost는 TR1 라이브러리를 최초로 구현 한 것 중 하나였습니다. 그것이 표준에 있기 때문에 표준 버전을 선호해야합니다. Boost.Lambda는 이제 실제 람다로 대체되었습니다.
Kerrek SB

6
C ++ 11에 대한 Wikipedia 기사에는 대부분의 변경 사항이 요약되어 있습니다.
일부 프로그래머 친구

답변:


286

C ++ 11 언어 기능 또는 라이브러리로 대체 가능

TR1 ( TR1 라이브러리 인 경우 설명서에 표시되어 있음 )

C ++ 11에서 백 포트 된 기능 :

C ++ 17 언어 기능으로 대체 가능 :

표준 팀은 여전히 ​​작업 중입니다.

다양한 템플릿을 사용하여 MPL 의 많은 부분을 잘라내 거나 제거 할 수 있습니다. Lexical 캐스트 의 일부 일반적인 사용 사례는 std :: to_string 및 std :: sto X 로 대체 될 수 있습니다 .

일부 부스트 라이브러리는 C ++ (11)에 관련된뿐만 아니라 좀 더 확장이되어, 예를 들어 Boost.Functional이 / 해시가 포함 hash_combine C ++ 11에서 찾을 수 없습니다 및 관련 기능을 Boost.Chrono는 I / O 및 라운딩 및 많은 다른 시계를 가지고, 등을 부스트하기 전에 부스트를 살펴보고 싶을 수도 있습니다.


1
Boost.Chrono , Boost.ExceptionBoost.Swap 목록에 추가하십시오 .
ildjarn

9
Boost.Lambda (또는 Boost.Phoenix의 람다)는 여전히 다형성 람다에 유용합니다.
Xeo

2
비록 좋은 목록, 비록 std::unique_ptrTR1의 일부 는 아니지만 (이동 의미론이 필요하기 때문에)
Nemo

1
@ildjarn : Boost.Chrono는 <chrono>보다 훨씬 더 많은 기능을 제공합니다. Boost.Exception-N2179 만 관련됩니다.
kennytm

2
@ 네모 : 예. 만 표준 : TR1 :: shared_ptr의 IS TR1의 일부가 const를 표준 :: unique_ptr을 대체 부스트 :: scoped_ptr를 부스트 :: 포인터를 컨테이너의 사용 사례
kennytm

56

실제로 부스트 라이브러리가 레거시가 될 것이라고 생각하지 않습니다.

예, 당신은 사용할 수 있어야합니다 std::type_traits, regex, shared_ptr, unique_ptr, tuple<>, std::tie, std::begin더으로 이동하지 않는 대신 부스트 Typetraits의 / 유틸리티,,, 튜플 부스트, Smartpointer 부스트 범위 라이브러리를 높일 수 있지만, 실제로는 '스위치'에 진짜 필요가 없을 것 C ++ 11에 대한 코드.

또한 내 경험 std에 따르면 대부분의 버전은 다소 기능이 떨어집니다. 예 AFAICT 표준은 않습니다 하지

  • Perl5 정규식
  • call_traits
  • 특정 정규식 인터페이스 멤버 (와 같은 bool boost::basic_regex<>::empty()) 및 기타 인터페이스 차이점
    • Boost 인터페이스가 Boost Xpressive와 정확히 일치하기 때문에 더 많이 물립니다.
    • Boost String Algorithms와 훨씬 더 잘 작동합니다. 분명히 후자는 표준 대응 물 이 없습니다 (아직?)
  • TMP (부스트 퓨전)와 관련된 많은 것
  • 게으른 표현 템플릿 기반 람다; C ++ 11과 달리 오늘날 다형성이 가능 하다는 점에서 불가피한 이점이 있습니다 . 따라서 그들은 종종 더 간결해질 수 있습니다.

     std::vector<int> v = {1,2,-9,3};
    
     for (auto i : v | filtered(_arg1 >=0))
         std::cout << i << "\n";
    
     // or:
     boost::for_each(v, std::cout << _arg1);
    

    가장 확실한 것은 C ++ 11 람다 (후행 리턴 유형, 명시 적 캡처 및 선언 된 매개 변수 포함)보다 여전히 매력적입니다.

또한 C ++ 03에서 C ++ 11 로의 경로 별 마이그레이션을 촉진하고 C ++ 11 및 C ++ 03 코드베이스를 통합하는 데있어 Boost의 BIG 역할이 있습니다. 나는 특히 생각하고있다

  • 자동 부스트 (BOOST_AUTO)
  • 부스트 유틸리티 ( boost::result_of<>및 관련)
  • Foreach 부스트 (BOOST_FOREACH)
  • 잊지 마세요 : Boost Move-Boost 1_48 + 및 C ++ 11 컴파일러를 사용하는 C ++ 03 컴파일러에서 동일하게 컴파일되는 구문으로 이동 의미론을 사용하여 클래스를 작성할 수 있습니다.

그냥 내 $ 0.02

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.