我们有一个相当大的项目,它在几个地方定义了static const std::string
s 用作参数名称;其中一些需要在静态初始化期间连接:
富.h:
struct Foo {
static const std::string ParamSuffix;
};
foo.cpp:
const std::string Foo::ParamSuffix = ".suffix";
酒吧.h:
struct Bar {
static const std::string ParamPrefix;
};
bar.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 (或包装对象或其他)来初始化另一个 sstatic const std::string
吗?