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

标签 c++ macros c++17 c-preprocessor

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

关于c++ - 是否有预处理器宏来防止其他人在 C++ 中包含私有(private) header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66616002/

相关文章:

C++ Function Hook(仅内存地址)

c++ - 关于在 S-DES 中实现扩展函数的更有效方法的简单问题

c++ - C++ 中的 Const 函数和接口(interface)

c++ - 使用 std::sort 和 std::next_permutation

rust - 是否使用rust 格式!宏提供用户指定的填充字符

emacs - 不知道lisp宏是怎么构造它的扩展的?具体步骤是什么?

c++ - 是否可以使作为默认参数的宏在调用站点展开?

c++ - 地下结构化绑定(bind)实现和 std::tuple

c++ - 如何打印 n 维 C++ STL 容器?容器是数组的数组或 vector 的 vector

c++ - std::variant 可以定义多少种类型?