gpt4 book ai didi

c++ - 静态初始化顺序和字符串连接

转载 作者:太空狗 更新时间:2023-10-29 20:13:29 26 4
gpt4 key购买 nike

我们有一个相当大的项目,它在几个地方定义了 static const std::string 用作参数名称;其中一些需要在静态初始化期间连接起来:

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;
};

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 成员的初始化顺序。

我不喜欢通常的解决方案,即用函数替换所有这些变量,因为

  1. 有很多这些变量,即很多代码更改
  2. 连接需要特殊的函数,这使得代码库不一致甚至更难看

我目前不能使用 C++11,它的 constexpr 功能会让事情变得更容易(我认为)。

问题是:是否有任何技巧可以让我连接static const std::string(或包装器对象或其他)来初始化另一个静态常量 std::string?

最佳答案

The question is: Is there any trick that would allow me to concatenate static const std::strings (or wrapper objects or whatever) to initialize another static const std::string?

除了你不喜欢的以外,没有琐碎的事情:为静态字符串创建函数。

虽然有一些重要的替代方案(例如,用字符串容器/字符串映射替换所有硬编码字符串并在应用程序启动时加载映射)。

不过我的建议是使用静态函数(您拒绝的解决方案)。

关于c++ - 静态初始化顺序和字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com