c++ - 推荐的 C++ 库设计

标签 c++ design-patterns dll

<分区>

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

模型 1:

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

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

模型 2:

父命名空间,根据功能进一步 segmentation 为子命名空间。例如 .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 。

namespace library
{
   //datatypes go here

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

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

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

最佳答案

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


选项 1:将所有内容都放在一个命名空间 中会导致添加太多不同的内容,并归为一个组。

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

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


但这真的取决于图书馆,你要写。老实说,选择这些选项中的一个然后再切换到另一个并不是什么大问题。因此,您可以开始使用这些选项之一,如果情况变得糟糕,您发现其他一些选项将是更好的选择 - 就这么做吧。


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

关于c++ - 推荐的 C++ 库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651036/

相关文章:

c++ - 如何将对象数组中的内容复制到 C++ 中的另一个数组中?

c++ - 免费互斥问题

javascript - JavaScript 中好的单例模式

c# - 如何将函数指针从 C# 传递到 C++ Dll?

c++ - C++ DLL def 文件中的重载函数

c# - 从 C# 应用程序调用 C++ DLL 方法

c++ - 初始化在构造函数中实现自身的类模板

c++ - 解决 "only static const integral data members can be initialized within a class"编译错误

php - PHP和JS如何共享HTML模板?

java - 将 List<String> 转换为 List<MyObject>,其中 MyObject 包含一个表示顺序的 int