C++ 多个小函子类的共享头文件?
我是一个新的程序员,我遇到了一个需要创建几个(2-4)小函子类的情况,这些类与我的其他类密切相关。主要类称为GraphicsRender,它本质上是OpenGL的包装器,将所有OpenGL API调用完全封装在一个编译单元中。。因为所有的functor只支持GraphicsRender类,所以我考虑在GraphicsRender.h头文件中声明它们 我知道“规则”通常是每个头文件只有一个类声明。。那么我应该在哪里声明函子呢C++ 多个小函子类的共享头文件?,c++,class,oop,functor,C++,Class,Oop,Functor,我是一个新的程序员,我遇到了一个需要创建几个(2-4)小函子类的情况,这些类与我的其他类密切相关。主要类称为GraphicsRender,它本质上是OpenGL的包装器,将所有OpenGL API调用完全封装在一个编译单元中。。因为所有的functor只支持GraphicsRender类,所以我考虑在GraphicsRender.h头文件中声明它们 我知道“规则”通常是每个头文件只有一个类声明。。那么我应该在哪里声明函子呢 为每个函子类分别创建.h和.cpp文件?(所有这些都必须包含API调用
- 为每个函子类分别创建.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){
//实现就在这里。
}
即使模板不用于单独编译,这也使得读取接口文件变得更加容易,并且仍然隐藏了实现细节,至少对开发人员来说是这样