#include <iosfwd>
在头文件中并且 #include <iostream>
仅在 cpp 文件中被认为是最佳实践。#include <iostream>
我正在尝试在现有项目中将大量从标头文件移动到 cpp 文件。
有没有办法保证#include
依赖树中没有文件有#include
-d <iostream>
?理想情况下,编译失败的方式,比如static_assert
.
#include <iosfwd>
在头文件中并且 #include <iostream>
仅在 cpp 文件中被认为是最佳实践。#include <iostream>
我正在尝试在现有项目中将大量从标头文件移动到 cpp 文件。
有没有办法保证#include
依赖树中没有文件有#include
-d <iostream>
?理想情况下,编译失败的方式,比如static_assert
.
C++ 不能在语言级别上真正做到这一点。甚至评论中的一些建议,例如检查 iostream 标头的属性是否已经存在,也不起作用。原因是标头不是孤立的;没有什么可以阻止 .cpp 文件包含 iostream 标头后跟您自己的标头。检查标题中的属性会产生误报,因为它不是包含它的标题。
您的问题是关于一般依赖关系图,这不是 C++ 作为一种语言识别的东西(至少,就标题而言)。如果你有 C++20 的模块......好吧,你不会在意,因为模块导入不会导致你试图避免的问题。
因此,任何验证您要测试的内容的尝试最终都将基于构建系统中的某些内容,而不是语言。您能做的最多的事情是获取哪些标头包含哪些其他标头的转储,并通过一些模式匹配运行它以查找 iostream 标头。