仅 header 个库的配置 (C++)

Configuration of a header only library (C++)

我正在用 C++ 编写 header-only 库。 为了尽可能简单,用户只需 #include mylib.h

在某些情况下,(高级)用户可能想要配置库的行为(例如错误处理、compile-time或运行时检查、调试输出、可能还有其他东西)

请不要告诉我最好的方法(甚至是标准方法),否则问题将被搁置!!!

现在,我有一个文件 'config.h' 作为我的库的一部分,其中包含相关的 #define MYLIB_XYZs 但我意识到这完全是胡说八道,因为用户需要修改库本身为了配置。

您可以让您的 config.h 提供默认值。只需通过检查包装每个预处理器定义即可:

#ifndef MYLIB_XYZ
#define MYLIB_XYZ 1 // some sensible default
#endif

如果用户自己设置了定义,将使用user-set值。否则,它将退回到您提供的默认值。

只是不要忘记在每个 header 文件中 #include <mylib/config.h>

Windows headers, most notably in ATL 中使用了类似的东西,这是一个 Microsoft-provided header-only 库。