title: Recommended C++ Library Design
body: <p>I'm in the process of developing a C++ library providing different functions related to image/signal processing and other stuff. Its basically a development library for further use by developers. I want it to be as convenient and easy to use as possible. I have 3 different models in mind:</p>
  
  <h1>Model 1:</h1>
  
  <p>A single large namespace containing all the functionalities of the library. e.g The C++ Standard Library is implemented inside the <code>namespace std</code>. Or OpenCV is implemented inside the <code>namespace cv</code>.</p>
  
  <pre><code>namespace library
  {
      //all classes, variables, functions, datatypes are present inside this namespace
  }
  </code></pre>
  
  <h1>Model 2:</h1>
  
  <p>A parent namespace, further subdivided into child namespaces according to functionality. e.g The .NET Framework's parent <code>namespace System</code> contains <code>namespace Collections</code>, <code>namespace Windows</code> etc...</p>
  
  <pre><code>namespace library
  {
      //datatypes go here
  
      namespace group1
      {
         //functions related to group 1
      }
  
      namespace group2
      {
         //functions related to group 2
      }
  
      .
      .
      .
  }
  </code></pre>
  
  <h1>Model 3:</h1>
  
  <p>Almost same as model 2, but containing functions as <code>static</code> members of classes instead of namespaces.</p>
  
  <pre><code>namespace library
  {
     //datatypes go here
  
     class group1
     {
       public:
          static function1();
          static function2();
     }
  
     class group2
     {
       public:
          static function1();
          static function2();
     }
  }  
  </code></pre>
  
  <p>I need recommendation on which of these design model is best? Is there any other better approach?
  Currently I am comfortable with the second model.</p>