C++ class header files organization(C++ 类头文件组织)
问题描述
对于必须处理分布在多个源文件和头文件中的大量相互依赖的类的人,您建议的 C++ 编码和文件组织指南是什么?
What are the C++ coding and file organization guidelines you suggest for people who have to deal with lots of interdependent classes spread over several source and header files?
我的项目中有这种情况,解决跨多个头文件的类定义相关错误变得相当头疼.
I have this situation in my project and solving class definition related errors crossing over several header files has become quite a headache.
推荐答案
一些通用准则:
- 将您的接口与实现配对.如果你有 foo.cxx,那么其中定义的所有内容最好在foo.h中声明.
- 确保每个头文件#includes所有其他必要的头文件或独立编译所需的前向声明.
- 抵制创建一切"标题的诱惑.他们总是在路上遇到麻烦.
- 将一组相关(且相互依赖)的功能放入一个文件中.Java 和其他环境鼓励每个文件一个类.使用 C++,您通常希望每个文件有一个 组 类.这取决于您的代码结构.
- 尽可能优先使用前向声明而不是 #include.这允许您打破循环头依赖关系.本质上,对于跨单独文件的循环依赖关系,您需要一个看起来像这样的文件依赖关系图:- A.cxx需要- A.h和- B.h
- B.cxx需要- A.h和- B.h
- A.h需要- B.h
- B.h是独立的(并且前向声明在- A.h中定义的类)
 - Pair up your interfaces with implementations.  If you have foo.cxx, everything defined in there had better be declared infoo.h.
- Ensure that every header file #includes all other necessary headers or forward-declarations necessary for independent compilation.
- Resist the temptation to create an "everything" header. They're always trouble down the road.
- Put a set of related (and interdependent) functionality into a single file. Java and other environments encourage one-class-per-file. With C++, you often want one set of classes per file. It depends on the structure of your code.
- Prefer forward declaration over #includes whenever possible. This allows you to break the cyclic header dependencies. Essentially, for cyclical dependencies across separate files, you want a file-dependency graph that looks something like this:- A.cxxrequires- A.hand- B.h
- B.cxxrequires- A.hand- B.h
- A.hrequires- B.h
- B.his independent (and forward-declares classes defined in- A.h)
 如果您的代码打算成为其他开发人员使用的库,则需要采取一些额外的步骤: If your code is intended to be a library consumed by other developers, there are some additional steps that are important to take: - 如有必要,请使用私有标头"的概念.也就是说,多个源文件需要的头文件,但公共接口从不需要.这可能是一个包含常见内联函数、宏或内部常量的文件.
- 在文件系统级别将公共接口与私有实现分开.我倾向于在我的 C 或 C++ 项目中使用 include/和src/子目录,其中include/包含我所有的公共标头,并且src/有我所有的来源.和私有标头.
 - If necessary, use the concept of "private headers". That is, header files that are required by several source files, but never required by the public interface. This could be a file with common inline functions, macros, or internal constants.
- Separate your public interface from your private implementation at the filesystem level.  I tend to use include/andsrc/subdirectories in my C or C++ projects, whereinclude/has all of my public headers, andsrc/has all of my sources. and private headers.
 我建议找一本 John Lakos 的书大型 C++ 软件设计.这是一本相当厚重的书,但如果你只是浏览一下他关于物理架构的一些讨论,你会学到很多东西. I'd recommend finding a copy of John Lakos' book Large-Scale C++ Software Design. It's a pretty hefty book, but if you just skim through some of his discussions on physical architecture, you'll learn a lot. 这篇关于C++ 类头文件组织的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网! 
 
本文标题为:C++ 类头文件组织
 
				
         
 
            
        - 如何对自定义类的向量使用std::find()? 2022-11-07
- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- STL 中有 dereference_iterator 吗? 2022-01-01
- Stroustrup 的 Simple_window.h 2022-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- 静态初始化顺序失败 2022-01-01
- C++ 协变模板 2021-01-01
- 从python回调到c++的选项 2022-11-16
- 近似搜索的工作原理 2021-01-01
 
						 
						 
						 
						 
						 
				 
				 
				 
				