用 C++ 构建单文件/仅标头的库

AUD*_*IUV 5 c++ header-only c++11

在 C++ 中构造单文件/仅标头库,以便它们有条件地成为标头或实现,这是否被认为是良好实践?例如,

#ifndef LIBRARY_HEADER_HPP_
#define LIBRARY_HEADER_HPP_

// Header

struct Test {
    void test(); 
};

#endif // LIBRARY_HEADER_HPP_

#ifdef LIBRARY_IMPLEMENTATION_
#undef LIBRARY_IMPLEMENTATION_

// Implementation

void Test::test() {

}

#endif // LIBRARY_IMPLEMENTATION_
Run Code Online (Sandbox Code Playgroud)

因此,库的用户将#define LIBRARY_IMPLEMENTATION单个 #include "Library.hpp"实现文件中使用一个定义,以避免多个定义。

我已经在 C 库中看到过这种策略(想到了STB),但我想知道这在现代 C++ 中是否被认为是惯用的(或者是否有更好的策略来创建单文件/仅头文件库)。