Структурирование однофайловых / только заголовочных библиотек в C++
Считается ли хорошей практикой структурировать библиотеки с одним файлом / только заголовки в 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_
Пользователь библиотеки будет поэтому #define LIBRARY_IMPLEMENTATION
до одного #include "Library.hpp"
в одном файле реализации, чтобы избежать нескольких определений.
Я видел эту стратегию, используемую в библиотеках C ( STB приходит на ум), но мне было интересно, будет ли это считаться идиоматическим в современном C++ (или есть ли лучшие стратегии для создания библиотек с одним файлом / только заголовками).