これを実現するには、マクロに依存するコードを、ライブラリ自体の一部としてではなく、ライブラリにリンクするコードの一部としてコンパイルする必要があります。あなたができる最善のことは次のようなものです:
パブリック.hファイル:
namespace LibraryPrivate {
void functionForOptionSet();
void functionForOptionUnset();
}
#ifdef OPTION1
inline void dependentBehaviour() {
LibraryPrivate::functionForOptionSet();
}
#else
inline void dependentBehaviour() {
LibraryPrivate::functionForOptionUnset();
}
#endif
ライブラリの.cppファイル:
namespace LibraryPrivate {
void functionForOptionSet()
{ i = 1; }
void functionForOptionUnset()
{ i = 0; }
}
つまり、ライブラリに両方のオプションを実装する必要がありますが、マクロに基づいて(部分的に)インターフェイスを制限することができます。char
WinAPIがvs.wchar_t
関数で行うことのようなものです。ifは両方SomeFunctionA(char*)
を提供し、次にそれらの1つに展開するSomeFunctionW(wchar_t*)
マクロを提供します。SomeFunction