多个小型函子类的共享头文件
Shared header file for multiple small functor classes?
我是一名新程序员,我遇到了需要创建一些(2-4)个与我的其他类密切相关的小函子类的情况。主类称为GraphicsRenderer,它本质上是OpenGL的包装器,将所有OpenGL API调用完全封装在一个编译单元中。因为所有的函子都只支持GraphicsRenderer类,所以我正在考虑在GraphicsRenderer.h头文件中声明它们。
我知道"规则"是每个头文件通常只有一个类声明。那么我应该在哪里声明函子..?
-
为每个函子类创建单独的 .h 和 .cpp 文件?(所有这些都必须包含 API 调用。
-
在与图形渲染器类相同的文件中声明/定义所有函子类?(这会将所有 API 调用保留在相同的编译单元中。
-
或者这是命名空间的好地方?嵌套类声明(即:在 GraphicsRenderer 类声明中声明删除器函子)呢?
除了拥有更少的文件之外,您将每个类保存在单独的.h
/.cpp
文件中不会造成太大损失。我建议每个文件有一个类。
话虽如此,您仍然可以将头文件合并到一个包含所有其他.h
文件的通用头文件中,这将使 API 用户更方便。假设您的GraphicsRenderer
只能与函子一起使用,您甚至可以将它们的.h
文件包含在GraphicsRenderer'h
头文件中。
至于命名空间,不同的团队对它们有不同的约定。我更喜欢使用命名空间仅用于防止 API 冲突 - 我通常为大面积的内聚 API 保留单个命名空间。我见过其他团队的极端程度几乎每个类都有一个命名空间。
如果您的函子不是模板,请在 .h 文件中声明接口,如下所示:
文件 .h:
class GraphicsRenderer {
void someApiCall();
void someOtherApiCall();
};
用于实施的文件.cpp:
#include <GL.h>
GraphicsRenderer::SomeApiCall() {
//Implementation goes here.
}
如果要将它们一起使用并且它们足够小,则将它们打包到单个头文件中没有问题。例如,stl 库有一个包含类集合的 utility
标头。
但是保持实现和接口尽可能分开,所以不要实现内联函数,在.cpp
文件中实现它们,并尽可能摆脱 .h 文件中的#include
,尽可能使用前向声明。这也缩短了编译时间。
例外情况是当您使用模板时,但即使您这样做,我也建议您像这样拆分文件:
在 MyFile.h 文件中:
template <class T>
class MyClass {
public:
template <class U>
void apiCall(U u);
};
#include "MyFilePriv.h"
MyFilePriv.h 与实现:
template <class T>
template <class U>
MyClass<T>::apiCall(U u) {
//Implementation goes here.
}
即使模板不是用于单独编译的,这也使得读取接口文件变得更加容易,并且仍然隐藏了实现细节,至少对开发人员来说是这样。
- 在共享文件夹上恢复有效权利的问题
- C 11中线程之间的共享文件记录
- 在线程之间共享文件描述符
- ReadFile winapi在从虚拟盒共享文件夹读取时失败.GetLastError正在引发错误183
- 在写入远程Windows共享文件夹的所有者时,GetNamedSecurityInfo返回ERROR_ACCESS_DE
- 以编程方式在非 Windows 计算机中创建共享文件夹
- 在 DLL 中打开共享文件
- 在VirtualBox的共享文件夹中构建符号链接共享库
- 如何在Windows平台中获取远程Windows服务器的共享文件夹的文件列表
- Qt:有共享文件夹的类吗?
- 在Windows 2008 R2服务器/ Windows 7中,判断谁正在访问共享文件夹中的文件
- OpenMP共享文件处理程序
- NetShareEnum(.)winapi无法删除不必要的共享文件夹
- NuGet与TeamCity的项目由2个解决方案共享- .h文件未找到
- 如何共享文件删除权限时,我打开一个文件ifstream
- 为共享文件使用预处理器指令
- 在QtC++中将一个简单文件夹转换为共享文件夹
- 如何让python识别读取预编译的共享文件
- 共享文件视图-访问控制
- 在Visual C++10中在项目之间共享文件