是否有预处理器宏来防止其他人在 C++ 中包含私有 header?

Is there a preprocessor macro to prevent others include a private header in C++?

我有一个 private.hpp header 应该只用于 2 类,这个 header 执行那些 类 使用的一些操作,但是,我团队的其他软件工程师开始在同一个模块中使用它,我不得不修复那些包含并向那些 类 添加更多方法。我想知道是否有办法从预处理器或链接器中抛出错误以停止使用那 2 类.

中的 header

作为@S.M。提到,您可以在需要 secret.hpp :

的文件中定义预处理器变量
#define INTERNAL_OPERATIONS_ALLOWED // top of file
#include "secret.hpp"

// ...

#undef INTERNAL_OPERATIONS_ALLOWED // end of file

并在 private.hpp 之上添加条件:

#if !defined(INTERNAL_OPERATIONS_ALLOWED)
    #error "DO NOT USE THIS HEADER"
#endif

// ...

或单独定义您的宏:

#ifdef INTERNAL_OPERATIONS_ALLOWED
    #define OPERATION(X) X
#else
    #error "DO NOT USE THIS OPERATION"
#endif

这不会阻止其他开发人员使用您的操作,但他们必须有意定义 INTERNAL_OPERATIONS_ALLOWED,这意味着他们知道他们不应该这样做。