防止标头包含在编译时的某些文件中

Prevent header from being included in some files, in compilation time?

本文关键字:文件 编译 包含      更新时间:2023-10-16

我有一个头文件,我可以控制它的内容。

此外,我有一个接口 I1(在其他一些文件中定义),从中各种派生的实现。我想禁止这些实现包含这个头文件。因此,在编译时,如果包含该文件,编译将失败,否则,它将照常继续。

所以我有头文件和一个接口定义(在其他一些文件中)。我想禁止在编译期间包含给定头文件的接口实现。

关于如何实现这一目标的任何建议?我可以使用一些聪明的模板/预处理技巧吗?

在头文件中:

#ifndef FOO_IMPLEMENTATION_USE_ONLY
#error This file is for inclusion in the FOO implementation only
#endif

在应该包含它的文件中:

// Define this ONLY in the Foo implementation files
#define FOO_IMPLEMENTATION_USE_ONLY