6

ヘッダー ファイル内の一連のマクロで使用される単一のグローバル ヘルパー関数があります。その意図は、単一のヘッダーを 'ing するだけでマクロを使用できるようにすることです#include(つまり、関数定義をヘッダーに保持し、別のコンパイル ユニットに配置することを避けたいと考えています)。ただし、#include重複シンボルの問題が発生するため、アプリケーションがこのファイルを複数のコンパイル単位で使用すると、問題が発生します。

ヘルパー関数には、インラインで宣言してはならない十分な特性があります。

いじり回していたところ、名前のない名前空間を使用すると、シンボルの重複の問題が解決することがわかりました。

namespace
{
    void foo(...)
    {
    }
};

#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...

このアプローチに欠点はありますか? より良い代替手段はありますか?

4

1 に答える 1

4

としてマークされていない限り、プロジェクトで許可される関数定義inlineは 1 つだけです。関数宣言は必要な数だけ持つことができます (別名関数プロトタイプ)。

関数定義を .cpp ファイルに移動し、宣言をヘッダー ファイルに残します。

void foo(...); // no function body makes this a declaration only

またはあなたはそれをマークすることができますinline:

inline void foo(...) { /* ... */ } 

inline原則として、関数は小さく、計算速度が速い必要があります。

于 2013-05-31T07:22:42.937 に答える