我正在开发C++库,提供与图像/信号处理和其他内容相关的不同功能。它基本上是一个供开发人员进一步使用的开发库。我希望它尽可能方便和易于使用。我心里有3种不同的模式:推荐的C++库设计
模型1:
包含库的所有功能的单一大命名空间。例如C++标准库在namespace std
内实现。或者在namespace cv
内部实现OpenCV。
namespace library
{
//all classes, variables, functions, datatypes are present inside this namespace
}
模型2:
父命名空间,根据功能进一步细分成子名字空间。 e.g .NET框架的父namespace System
包含namespace Collections
,namespace 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();
}
}
我需要建议这些设计模型哪个最好?还有其他更好的方法吗? 目前我很喜欢第二款车型。
使用任何有意义的你代码(看看boost,例如,没有一个标准,每个库都根据需要使用嵌套命名空间......)但我要说的一件事是,使用命名空间而不是类来分组函数... – Nim
我个人发现模型2更直观,并且让我知道如果我需要在API中找到某些东西,我应该在哪里看看。 – jviotti