我有几个可以隐式转换为字符串的类字符串类。我对这些有一些用途;一个例子是通过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;
}
有什么办法可以让这两个例子都起作用吗?
- 如果我 include
operator std::string
,则 ExampleB 无法编译,说std::string::operator=(const char *)
and之间存在歧义std::string operator=(const std::string&)
(这是有道理的)。 - 如果我不包含
operator std::string
,则 ExampleA 无法编译;显然不允许将 TranslatableString 隐式转换为 const char * 到 std::string,尽管我不太了解 C++ 的隐式转换规则来解释原因。