gpt4 book ai didi

具有隐式转换的 C++ 类字符串类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:47 28 4
gpt4 key购买 nike

我有几个可以隐式转换为字符串的类字符串类。我对这些有一些用途;一个例子是保存需要在运行时由 gettext 翻译的文本。 :

class TranslatableString
{
public:
explicit TranslatableString(const char *s) : native_text_(s) {}
operator const char *() const { return gettext(native_text_); }

// Or not - see below:
operator const std::string() const { return gettext(native_text_); }

private:
const char * const native_text_;
};

现在我试图尽可能简单地使用这个类(即,使用它应该尽可能像字符串文字)。特别是,我希望以下两个示例用法都能正常工作:

const TranslatableString HELLO = TranslatableString("Hello, world!");

std::string ExampleA() {
return HELLO;
}

void ExampleB() {
std::string s;
s = HELLO;
}

有什么方法可以使这两个示例都起作用吗?

  • 如果我包含 operator std::string,则 ExampleB 无法编译,表示 std::string::operator=(const char *)std::string operator=(const std::string&)(这是有道理的)。
  • 如果我不包含operator std::string,则ExampleA 无法编译;显然不允许将 TranslatableString 隐式转换为 const char * 到 std::string,尽管我不太了解 C++ 的隐式转换规则来解释原因。

最佳答案

在每个转换序列中只允许一个用户定义的转换,这就是为什么您不能“通过”const char* 的原因。 (注意 const char*std::string 也是用户定义的转换)。

是否需要转换为const char*?没有它(并且覆盖到 std::string),两个示例都可以工作。

可能还值得考虑在内部将数据存储为 std::string,而不是 const char*。您不必担心重新分配问题、数据在您手中“消失”等问题。

关于具有隐式转换的 C++ 类字符串类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838153/

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