条件付きでヘッダーまたは実装のいずれかになるように、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_
したがって、ライブラリのユーザーは、複数の定義を避けるために、単一の実装ファイル内の1 つ#define LIBRARY_IMPLEMENTATION
の前にします。 #include "Library.hpp"
C ライブラリで使用されているこの戦略を見たことがあります ( STBが思い浮かびます) が、これが現代の C++ で慣用的と見なされるかどうか (または、単一ファイル/ヘッダーのみのライブラリを作成するためのより良い戦略があるかどうか) を考えていました。