2014-12-15 4 views
4

현재 프로젝트에는 C++ API 작성과 PIMPL 관용구를 사용하기로 결정했습니다.어디에서나 PIMPL을 사용해야합니까?

내 프로젝트에서 PIMPL 관용구를 사용해야할까요? 예를 들어 std::exception에서 상속받은 맞춤 클래스를 만들 필요가 있습니다.이 클래스를 PIMPL 관용구를 염두에두고 디자인해야합니까? 아니면 공용 구현으로 작성할 수 있습니까? 내가 작성하는 모든 클래스가 중심으로 설계되어야한다 PIMPL 관용구를 사용하고해서

는 것을 가정하는 잘못 느낀다. PIMPL이 이 아니고을 사용해야하는 예외가 있습니까?

+0

는 글쎄, 그것은 모든 곳에서 사용할 수 없습니다 바랍니다. –

+2

PIMPL의 주된 동기는 클래스 인터페이스가 변경 될 때마다 구현을 다시 컴파일하지 않아도 컴파일 시간을 줄이는 것이라고 생각했습니다. 문제가되지 않으면 어디서나 사용할 필요가 없습니다. – Jimmy

답변

3

질문의 주요 장점은 IDE 및 도구들이 당신의 API와 협력하여 일 무슨 심지어 당신의 API의 사용자와위한 것입니다. PIMPL를 사용하는 핵심 포인트는

  • 당신은 정말 사용자 (당신이 개인 메소드와 필드의 큰 금액 및 간단한 공용 인터페이스를 가지고)에서 구현을 숨기려.
  • 플랫폼 종속 코드에서 추상화하려고합니다.
  • 빌드 시간을 단축하고 싶습니다. 가상 전화 또는 간접의 모든 종류의 자신의 프로그램의 작동 시간에 너무 많은 사용자 비용을 때

당신은 PIMPL를 사용하지 않아야합니다 : 반복되는 작은 기능의

  • 시퀀스 호출 (그리고 당신은 할 수 없습니다 API 레벨에서 제거하십시오.)
  • 거대한 양의 작은 개체를 생성 및 삭제할 수 있으며 API 수준에서 제거 할 수 없습니다. 내가 그것을 사용 _don't_ 곳이기 때문에
3

PIMPL에는 비용이 있습니다.

따라서 당신이 정말 필요 만 좋은 생각, 예를 들면이다 C++ 키워드를 이름으로 사용하는 C 헤더의 사용을 포함하거나 수 많은 매크로를 정의합니다.

일부 (허브 포함) 옹호자 또는 최소한 빌드 시간 단축을 위해 PIMPL을 사용하는 것에 대해서는 논쟁하지 않지만 하드웨어를 던지는 것과 같은 다른 방법은 비용이 적게 듭니다. 당신은 API/라이브러리를 작성하는 경우

관련 문제