C++仍然是一种不断发展的语言,多年来一直在为它添加新功能.
我在C++中非常想念的一个特性是一个合适的模块概念:使用头文件的当前方法(使用条件#define来确保头文件不包括两次)对我来说似乎绝对不能令人满意.
例如,在我的项目中,我们遇到的问题是我们在许多源文件中有太多"#include",使得编译时间不必要很长:使用Incredibuild构建我们的产品需要45分钟,即使用至少10个核心并行.因此,我们必须花费大量时间手动清理文件,即删除包含以检查它们是否真的需要.
我认为拥有一个可以实现的模块概念是非常有用的
您是否认为可以定义这样的模块概念并将其集成到C++中,还是太复杂?你知道朝这个方向做出的任何努力吗?
编辑
感谢有关预编译头文件的建议.如果可能,我会尝试一下(我们使用Visual Studio 2008).也许我们以错误的方式使用头文件(?)我们为每个类使用一个头文件.然后我们有一个带有类实现的cpp文件.通常我们最终得到包含30,40个头文件的cpp文件.当我们更改cpp文件时,不再需要某些包含,但很难找出哪些包含.这部分与头文件包含其他头文件的事实有关.
我们花了太多时间重新安排导入,似乎没有一个工具可以自动执行此操作.这会节省我们很多时间.
In *_*ico 10
C++仍然是一种不断发展的语言,并且作为C++ 0x开发的一部分,新功能正在被添加到它中.
C++ 11标准已经被批准和发布,因此不再添加任何功能.至少再过几年.
我在C++中非常想念的一个特性是一个合适的模块概念:使用头文件的当前方法(使用条件
#define来确保头文件不包括两次)对我来说似乎绝对不能令人满意.
一些编译器支持#pragma once避免编写包含保护,但据我所知它是非标准的.有些情况下你不想要包括警卫; Boost.Preprocessor是一个库的示例,其中包含一些故意没有包含保护的头文件.
例如,在我的项目中,我们遇到的问题是我们在许多源文件中有太多"#include",使得编译时间不必要很长:使用Incredibuild构建我们的产品需要45分钟,即使用至少10个核心并行.因此,我们必须花费大量时间手动清理文件,即删除包含以检查它们是否真的需要.
Stroustrup有关于编译时间缓慢的FAQ条目.另请阅读关于包含头文件的GotW文章#7.你很可能包含的文件多于必要的文件.例如,您可以通过前向声明来逃避.如果您有大量的头文件,您可以尝试将它们拆分,以便您的源只包含您真正需要的声明.这可能只是您的文件结构不利于快速编译的问题.
1.明确分离模块实现的界面;
我们有PIMPL习惯用法(也称为编译防火墙).即使没有它,我也没有任何麻烦将实现放在.cpp文件和文件中的接口.h(即使它不是"纯"接口).
2.单独编译模块的接口和主体(当前.h文件每次被包含在其他文件中时反复编译):然后工具可以读取编译的接口并告诉它导出的类型,函数和类;
某些编译器支持您可以利用的预编译头文件.
3.write工具,可以更轻松地自动重新排列导入.
我不明白你的意思.
您是否认为可以定义这样的模块概念并将其集成到C++中,还是太复杂?你知道朝这个方向做出的任何努力吗?
信不信由你,有人建议在C++中添加某种模块概念,但是由于时间限制,它还没有被C++ 11所接受(他们正在研究其他提议,比如rvalue引用,在我的意见,更重要).它可能包含在C++标准的下一个版本或更新中.