2013-02-01 3 views
3

저는 이미지/신호 처리 및 다른 것들과 관련된 다양한 기능을 제공하는 C++ 라이브러리를 개발 중입니다. 기본적으로 개발자가 추가로 사용할 수있는 개발 라이브러리입니다. 가능한 한 쉽고 편리하게 사용하고 싶습니다.추천 된 C++ 라이브러리 디자인

모델 1 : 나는 마음에 3 개 가지 모델을 가지고

라이브러리의 모든 기능을 포함하는 하나의 큰 공간. 예 : C++ 표준 라이브러리는 namespace std 안에 구현됩니다. 또는 OpenCV는 namespace cv 안에 구현됩니다.

namespace library 
{ 
    //all classes, variables, functions, datatypes are present inside this namespace 
} 

모델 2 :

부모 네임 스페이스 추가 기능에 따라 하위 네임 스페이스로 구분.

namespace library 
{ 
    //datatypes go here 

    namespace group1 
    { 
     //functions related to group 1 
    } 

    namespace group2 
    { 
     //functions related to group 2 
    } 

    . 
    . 
    . 
} 

모델 3 ... namespace Windows 등, 닷넷 프레임 워크의 부모 namespace Systemnamespace Collections 포함 예컨대 : 모델 2와

거의 동일하지만, 클래스 대신 네임 스페이스의 static 구성원으로 포함 된 기능.

namespace library 
{ 
    //datatypes go here 

    class group1 
    { 
    public: 
     static function1(); 
     static function2(); 
    } 

    class group2 
    { 
    public: 
     static function1(); 
     static function2(); 
    } 
} 

이러한 디자인 모델 중 어느 것이 가장 좋을까요? 다른 더 좋은 방법이 있습니까? 현재 두 번째 모델에 익숙합니다.

+3

사용을 제안 정확히 등 소켓, 스레드, IPC 통신에 대해 래퍼를 구현하는 내 자신의 라이브러리를 가지고 당신의 코드 (예를 들어 부스트를 봐, 하나의 표준이 없다, 각 라이브러리는 필요에 따라 중첩 된 네임 스페이스를 사용한다.) 한 가지 말하지만, 네임 스페이스 대신 클래스를 사용하여 함수를 그룹화한다. – Nim

+0

개인적으로 모델 2가 더 직관적이며 API에서 무언가를 찾아야 할 때 어디에서 더 빨리 찾을 수 있는지 알려줍니다. – jviotti

답변

5

기능을 독립적으로 사용할 수있는 경우 (사용자의 제안을 보는 것처럼 보임) 여러 기능을 의미 적으로 그룹화 할 수 있지만 두 번째 옵션을 선택해야합니다.


옵션 1 : 단일 namespace 모든 것을 넣어 하나 개의 단일 그룹으로 분류 너무 많은 다른 것들을 추가로 이어질 것입니다.

옵션 2 : 다른 사람들보다 훨씬 직관적 인 옵션입니다. 라이브러리는 몇 가지 완전히 다른 것들을 결합하기 때문에 모든 것을 그룹으로 그룹화하고이 그룹 전체를 큰 이름의 namespace (라이브러리 이름)으로 그룹화하는 것이 좋습니다.

옵션 3 :이 옵션은 옵션 2와 거의 동일하지만 대신 class을 사용하면 나에게 좋지 않습니다. C++ 표준에서는 이것을 위해 namespace을 사용합니다.


하지만 실제로 라이브러리에 따라 다르므로 작성해야합니다. 솔직히이 옵션 중 하나를 선택하고 나중에 다른 옵션으로 전환하는 것은 큰 문제가되지 않습니다. 따라서 이러한 옵션 중 하나를 사용하여 시작할 수 있습니다. 문제가 발생하면 다른 옵션 중 일부가 더 나은 선택이 될 것입니다. 그냥 해보십시오.


예 : 내가 선택한 구조는이 옵션의 의미가 무엇 2.

+1

답변을 주셔서 감사합니다 ... 옵션 2 It :). – sgarizvi

관련 문제