如何保证不包含iostream?

问题描述 投票:1回答:1

[C0被认为是最佳实践。我正在尝试将许多#include <iosfwd> in header files and #include <iostream> only in cpp files从头文件移动到现有项目中的cpp文件。

是否有办法保证#include <iosfwd>依赖树中没有文件具有#include <iostream> -d #include <iostream>?理想情况下,这种方式会导致编译失败,例如#include

c++ c++17 iostream iosfwd
1个回答
0
投票

C ++不能在语言级别真正做到这一点。甚至评论中的某些建议(例如检查iostream标头的属性是否已经存在)都行不通。原因是报头不是孤立的。没有什么可以阻止.cpp文件包含iostream标头和您自己的标头。检查标头中的属性会产生误报,因为它不是包含标头的属性。

您的问题是关于一般的依赖关系图,这不是一种语言所识别的C ++(至少在头文件方面)。而且,如果您拥有C ++ 20的模块...那么,您将不在乎,因为模块导入不会引起您要避免的问题。

因此,任何验证您要测试的内容的尝试最终都将基于构建系统中的某些内容,而不是语言。您最大可能要做的是转储哪些标头包括哪些其他标头,然后通过某种模式匹配来运行它以查找iostream标头。

© www.soinside.com 2019 - 2024. All rights reserved.