2012-02-27 2 views
2

나는 경험있는 Mac/iOS 개발자이지만 처음에는 C++로 프로그램하기 시작했습니다. 필자는 수년 동안 C++을 사용하지 않았으며 지금은 만들려는 새로운 종류의 파일 형식에 대한 다중 플랫폼 지원을 원하기 때문에 그렇게 할 시간입니다.OS X Lion C++ 11, 부스트 및 기타 질문들

C++는 지난 수년간 진화 해 왔으며, 제 3 자 라이브러리가 매우 비극적으로 엉망이며 C++ 표준위원회의 노력으로 언어의 발전을 통제하고 있습니다. 그러므로 내 질문.

가능한 한 많은 고급 도구를 원하는대로 처리하고 동시에 가능한 표준을 준수하고 싶습니다. 필자의 주요 개발 플랫폼은 OS X Lion이며 Fedora 16 설치에 액세스 할 수 있습니다. 라이온 이상, Windows XP 이상 및 최신 Linux 커널을 대상으로하고 싶습니다. 따라서 하위 호환성은 여기에서 문제가되지 않습니다.

하나의 선택은 내 컴퓨터에 Boost 라이브러리를 설치하는 것입니다. 그러나 오랜 시간 전에 경험 한 것만 큼, 컴파일 시간 오류 및 OS X에서 수행해야하는 단점이있는 매우 고통스러운 프로세스입니다. 그 일을 지금 시도하면 그 경험이 똑같을 지 모르겠다. 다른 선택은 현재 라이온이 제공하는 TR1을 고수하는 것입니다. 그러나 TR1은 내가 아는 한 표준이 아니며, C++ 11에서 수행되도록 예정된 사실상의 사실적인 구현입니다. 그렇게하면 Boost가 제공하는 많은 고급 기능을 잃게됩니다.

이러한 두 가지 옵션을 손쉽게 사용할 수있는 고급 C++ 기능을 사용하고 표준을 최대한 준수하는 방법은 무엇입니까? Boost라면 Boost를 정적 라이브러리로 컴파일하여 최종 사용자 시스템에 Boost를 설치하지 않는 것이 좋습니다?

C++ 11 기능을위한 Xcode 4.3의 현재 지원은 무엇입니까?

위의 질문에 대한 의견은 물론 다른 의견도 보내 주시면 감사하겠습니다. 나는 현재 버전과 C++의 기능을 동기화하려고 노력하고 있는데, 처음 생각했을 때 그렇게 쉽지 않을 수도 있다는 것을 깨닫기 시작했다.

감사합니다.

답변

1

첫째, 부스트 두 매우 독특한 부분이 있습니다

  • 있는 사람들은 전용 헤더
  • 라이브러리

당신이 헤더에 충실하면 컴파일이 필요한 것들 - 오로지, 훨씬 더 쉬울 것입니다. Asio와 같은 일부 라이브러리에는 두 가지 컴파일 모드 (헤더 전용 및 라이브러리)가 있습니다. 그러나 많은 유용한 라이브러리들 (예 : boost::regex)에는 컴파일 된 라이브러리가 필요합니다.

두 번째로 C++ 11 지원이 빠르게 움직이고 있습니다. GCC 4.7과 곧 출시 될 Clang 3.1은 원자력 분야를 제외하고는 표준의 모든 주요 기능을 지원합니다 (토론은 여전히 ​​최상의 구현 전략에서 계속되고 있습니다). 따라서 Linux와 Mac에서 상황은 훌륭합니다 ...그러나 Visual Studio는 뒤쳐져 있으며 Microsoft는 실제로 빠르게 움직이는 것에 관심이 없기 때문에 Windows 지원은 최소한으로 유지됩니다 (지원되는 기능은 표준의 이전 버전을 기반으로하며 최종 버전과 100 % 호환되지 않습니다). Windows 용으로 컴파일 할 수 없다는 것을 의미하는 것은 아니며 Mingw 또는 이와 동등한 버전을 사용해야하므로 기존 Windows DLL과의 상호 작용을 피하는 것입니다.

두 관찰을 바탕으로

, 내가 추천 할 것입니다 : 당신이 윈도우 DLL과 상호 작용하려면 지금 C++ (11)을 피하기 위해

  • 시도, 그렇지 않으면 내가 연타를 추천 할 것입니다 (엑스 코드에서의 통합을위한)
  • 는을 부스트 라이브러리를 방지하고 라이브러리, 당신만큼 당신이 배포로 DLL을 사용하려는 경우
  • (더 선 (善)이 여전히 존재)을 헤더 전용 부분에 충실하려고 실행 파일과 함께 또는 패키지 시스템 등을 사용하지만, 정적 링크 이외에는 (설치시) 더 큰 어려움이 있습니다.
+0

매우 유익합니다. 나는 C++에 대한 윈도우 지원이 더 어려울 것이라고 상상했다. 창문이 막혔다면 (나는이 라이브러리를 C#으로 작성할 수 있다고 생각합니다) 라이브러리의 형태로 Boost를 사용하고 싶었습니다. Boost를 정적 라이브러리로 컴파일하고 라이브러리와 라이브러리를 연결하는 것이 트릭입니다. 정적 라이브러리의 경우 배포 가능한 아카이브 내에 코드가 내장되어 있으므로 외부 리소스가 필요하지 않습니다. – csotiriou

+0

@ChristosSotiriou : 당신이 부스트를 정적으로 컴파일한다면, 그렇습니다. 그냥 * 작동해야합니다. 또한 C++ 11 기능을 사용하지 않거나 Windows 라이브러리를 사용하지 않는 한 Windows 용 C++ 코드도 사용할 수 있습니다. –

+0

@MatthieuM .: C++ 11에 대한 VC2010의 지원은 나쁘지 않습니다. 필요한 것은 당신이하는 일을 알고 있다는 것입니다. 이동 생성자를 직접 작성하는 한 r-value 참조를 사용할 수 있습니다. 그리고 조금 더 제한된 형태의 람다와 몇 가지 다른 것들을 사용할 수 있습니다. Regex에서 shared_ptr, unique_ptr까지 새로운 표준 라이브러리 기능을 많이 지원합니다. –

1

참고 Mac 개발자는 아니지만 Boost를 선호합니다. 많은 C++ 11 표준이 여기에서 가져오고 더 많은 Boost 기능이 C++ 표준으로 포팅 될 것으로 기대할 수 있습니다.

그리고 Qt 애호가로서 : QtCore를 살펴보십시오. 그것은 매우 강력하고 크로스 플랫폼입니다. 모든

관련 문제