static const std::string
パラメータ名として使用されるいくつかの場所で sを定義するかなり大きなプロジェクトがあります。それらのいくつかは、静的初期化中に連結する必要があります。
foo.h:
struct Foo {
static const std::string ParamSuffix;
};
foo.cpp:
const std::string Foo::ParamSuffix = ".suffix";
bar.h:
struct Bar {
static const std::string ParamPrefix;
};
バー.cpp:
const std::string Bar::ParamPrefix = "prefix";
baz.h:
struct Baz {
static const std::string ParamName;
};
baz.cpp:
const std::string Baz::ParamName = Bar::ParamPrefix + Foo::ParamSuffix;
static const
メンバーが初期化される順序が定義されていないため、問題は明らかに「静的初期化の大失敗」です。
私は通常の解決策が嫌いです。つまり、これらの変数をすべて関数に置き換えます。
- これらの変数はたくさんあります。つまり、コードの変更がたくさんあります。
- 連結には特別な関数が必要なため、コード ベースの一貫性が失われ、さらに見苦しくなります。
私は現在、C++ 11を使用できません。これにより、その機能で物事が簡単になりconstexpr
ます(と思います)。
問題はstatic const std::string
、 s (またはラッパー オブジェクトなど)を連結して別の s を初期化できるトリックはありますstatic const std::string
か?