如何连接两个字符串以用作初始化列表中的参数?

时间:2012-01-23 16:47:25

标签: c++ string-concatenation

我有一个扩展另一个的类,所以构造函数初始化列表如下所示:

MyDialog() : BaseDialog(BaseWindow::getDisplay(), 425, 300, LOC(dialog_title)) {

LOC(dialog_title)处理本地化,它将替换为像"Dialog Title"这样的文字字符串。问题是我想使用LOC生成的另一个字符串,因此结果类似于Dialog Title - Mode。这需要连接三个字符串LOC(dialog_title)" - "LOC(dialog_mode)。如何在初始化列表中连接这些?

3 个答案:

答案 0 :(得分:3)

如果LOC被字符串文字替换,那么您可以简单地连接它们以获得新的字符串文字:

LOC(dialog_title) " - " LOC(dialog_mode)

否则,答案取决于基类是否需要std::string

std::string(LOC(dialog_title)) + " - " + LOC(dialog_mode)

或C风格的字符串,它将复制到它管理的缓冲区中:

(std::string(LOC(dialog_title)) + " - " + LOC(dialog_mode)).c_str()

或者它只是保持指针的C风格的字符串,在这种情况下,最好的选择是将基类更改为更少邪恶。

答案 1 :(得分:1)

显然,您的BaseDialog需要const char *。如果这是正确的,您可以将其更改为接受const std::string&,或在调用构造函数之前构造该字符串,并将其作为yourString.c_str()传递。

将其更改为const std::string&的好处是您不会破坏任何现有代码。

答案 2 :(得分:0)

以下是否有效?

MyDialog() : BaseDialog(BaseWindow::getDisplay(), 425, 300, std::string( LOC(dialog_title) + " - " + LOC(dialog_mode) ) {