C++ 多个小函子类的共享头文件?

C++ 多个小函子类的共享头文件?,c++,class,oop,functor,C++,Class,Oop,Functor,我是一个新的程序员,我遇到了一个需要创建几个(2-4)小函子类的情况,这些类与我的其他类密切相关。主要类称为GraphicsRender,它本质上是OpenGL的包装器,将所有OpenGL API调用完全封装在一个编译单元中。。因为所有的functor只支持GraphicsRender类,所以我考虑在GraphicsRender.h头文件中声明它们 我知道“规则”通常是每个头文件只有一个类声明。。那么我应该在哪里声明函子呢 为每个函子类分别创建.h和.cpp文件?(所有这些都必须包含API调用

我是一个新的程序员,我遇到了一个需要创建几个(2-4)小函子类的情况,这些类与我的其他类密切相关。主要类称为GraphicsRender,它本质上是OpenGL的包装器,将所有OpenGL API调用完全封装在一个编译单元中。。因为所有的functor只支持GraphicsRender类,所以我考虑在GraphicsRender.h头文件中声明它们

我知道“规则”通常是每个头文件只有一个类声明。。那么我应该在哪里声明函子呢

  • 为每个函子类分别创建.h和.cpp文件?(所有这些都必须包含API调用.)

  • 在与GraphicsRender类相同的文件中声明/定义所有函子类?(将所有API调用保持在相同的编译单元中..)

  • 或者这是一个名称空间的好地方?嵌套类声明(即:在GraphicsRender类声明中声明deleter functor)如何


除了文件更少之外,将每个类保存在一个单独的
.h
/
.cpp
文件中不会造成太大损失。我建议每个文件有一个类

尽管如此,您仍然可以将头文件组合成一个包含所有其他
.h
文件的公共头文件,这将使API用户更加方便。假设您的
GraphicsRenderer
仅可用于functor,您甚至可以将它们的
.h
文件包含到
GraphicsRenderer'h
头文件中


至于名称空间,不同的团队有不同的约定。我更喜欢使用名称空间仅仅是为了防止API冲突——我通常为大面积的内聚API保留一个名称空间。我见过其他团队的做法非常极端,几乎每个类都有一个名称空间。

如果您的functor不是模板,请在.h文件中声明接口,如下所示:

文件.h:

class GraphicsRenderer {
   void someApiCall();
   void someOtherApiCall();
};
用于实施的文件.cpp:

#include <GL.h>

GraphicsRenderer::SomeApiCall() {
    //Implementation goes here.
}
template <class T>
template <class U>
MyClass<T>::apiCall(U u) {
   //Implementation goes here.
}
MyFilePriv.h及其实现:

#include <GL.h>

GraphicsRenderer::SomeApiCall() {
    //Implementation goes here.
}
template <class T>
template <class U>
MyClass<T>::apiCall(U u) {
   //Implementation goes here.
}
模板
模板
MyClass::apiCall(U){
//实现就在这里。
}
即使模板不用于单独编译,这也使得读取接口文件变得更加容易,并且仍然隐藏了实现细节,至少对开发人员来说是这样