静的ライブラリとそれらを使用するプロジェクトごとに、何らかの方法でモジュール名を定義する必要があります。次のように単純にこれを行うことはできません:
std::string const module_name = "my module";
静的メンバーの初期化中にこの値が必要になるためです。静的データの初期化順序が定義されていないため、module_name
変数を使用しようとしても初期化されていない可能性があります。
私が定義したこの問題を解決するには
inline std::string const& module_name()
{
static std::string const name = "my module";
return name;
}
モジュールごとに。module_name()
ただし、すべての呼び出しが親モジュールからの実装を使用するように解決されているため、これは機能しません(module_name()
常に親実行可能プロジェクトの名前を返します)。そして、私はその理由を理解していません。このインライン関数は静的ライブラリで定義および使用されるため、実際のモジュール名を取得する必要があることを望みました。この関数がコンパイラによってインライン化されていないためですか?
この問題を解決するための推奨される方法はありますか?
コンパイラ: VC++10 および gcc、VC++10 でテスト済み