Считается ли хорошей практикой структурировать библиотеки с одним файлом / только заголовки в 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 ++ (или есть ли лучшие стратегии для создания библиотек с одним файлом / только заголовками).
Задача ещё не решена.
Других решений пока нет …