仅 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 库。
我正在用 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 库。