我有一个扩展另一个的类,所以构造函数初始化列表如下所示:
MyDialog() : BaseDialog(BaseWindow::getDisplay(), 425, 300, LOC(dialog_title)) {
LOC(dialog_title)
处理本地化,它将替换为像"Dialog Title"
这样的文字字符串。问题是我想使用LOC
生成的另一个字符串,因此结果类似于Dialog Title - Mode
。这需要连接三个字符串LOC(dialog_title)
," - "
和LOC(dialog_mode)
。如何在初始化列表中连接这些?
答案 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) ) {