是否有预处理器宏来防止其他人在 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
,这意味着他们知道他们不应该这样做。
我有一个 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
,这意味着他们知道他们不应该这样做。