ヘッダー ファイル内の一連のマクロで使用される単一のグローバル ヘルパー関数があります。その意図は、単一のヘッダーを 'ing するだけでマクロを使用できるようにすることです#include
(つまり、関数定義をヘッダーに保持し、別のコンパイル ユニットに配置することを避けたいと考えています)。ただし、#include
重複シンボルの問題が発生するため、アプリケーションがこのファイルを複数のコンパイル単位で使用すると、問題が発生します。
ヘルパー関数には、インラインで宣言してはならない十分な特性があります。
いじり回していたところ、名前のない名前空間を使用すると、シンボルの重複の問題が解決することがわかりました。
namespace
{
void foo(...)
{
}
};
#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...
このアプローチに欠点はありますか? より良い代替手段はありますか?