我有幾個字符串類可以隱式轉換爲字符串。我有這些用途的幾個;一個例子是,認爲需要在運行時gettext翻譯文本:隱式轉換的C++字符串類
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
,然後例B編譯失敗,他說,有std::string::operator=(const char *)
和std::string operator=(const std::string&)
(這是有道理的)之間的歧義。 - 如果我不包含
operator std::string
,則ExampleA無法編譯;顯然隱式地將TranslatableString轉換爲const char *爲std :: string是不允許的,儘管我不明白C++的隱式轉換規則足以解釋原因。
有道理。謝謝。 (這個特殊的類只用於字符串文字,所以'const char *'很好;在其他地方,我幾乎總是使用'std :: string'。) – 2013-04-05 16:39:51