4

我正在开发一个提供与图像/信号处理和其他东西相关的不同功能的 C++ 库。它基本上是一个供开发人员进一步使用的开发库。我希望它尽可能方便易用。我有 3 种不同的模型:

型号 1:

包含库的所有功能的单个大型命名空间。例如,C++ 标准库在namespace std. 或者 OpenCV 在namespace cv.

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

型号 2:

父命名空间,根据功能进一步细分为子命名空间。例如 .NET Framework 的父级namespace System包含namespace Collectionsnamespace Windows...

namespace library
{
    //datatypes go here

    namespace group1
    {
       //functions related to group 1
    }

    namespace group2
    {
       //functions related to group 2
    }

    .
    .
    .
}

模型 3:

与模型 2 几乎相同,但包含作为static类成员而不是名称空间的函数。

namespace library
{
   //datatypes go here

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

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

我需要推荐哪种设计模型最好?还有其他更好的方法吗?目前我对第二种模式感到满意。

4

1 回答 1

6

如果函数可以独立使用(看起来是这样,看看你的建议),并且可以在语义上对几个函数进行分组,我绝对会选择第二个选项。


选项 1:将所有内容放在一个单独的组中namespace会导致添加太多不同的东西,并分组到一个组中。

选项 2:我发现它比其他的更直观。namespace由于该库结合了几个完全不同的东西,将所有内容分组并将所有这些组作为一个大名称的一部分似乎是一个好主意- 库的名称。

选项 3:此选项与选项 2 几乎相同,但使用class而不是namespace对我来说似乎很糟糕。C++ 标准namespace为此提供了 s,请使用它们。


但这真的取决于图书馆,你要写。老实说,选择其中一个选项然后切换到另一个选项并不是什么大不了的事。因此,您可以开始使用其中一个选项,如果事情变得丑陋并且您看到,其他一些选项将是更好的选择 - 去做吧。


示例:我有自己的库,它实现了套接字、线程、IPC 通信等的包装器。我选择的结构正是您在选项 2 中建议的结构。

于 2013-02-01T16:57:43.923 回答