我的目标是设计一个装饰 std::string 的 String 类,以提供我的程序需要的一些功能。我想添加的一项功能是能够将任何内容隐式转换为我的 String 以节省一些输入。
为了实现隐式转换,我设计了以下类:
std::ostream& operator<<(std::ostream& o, const String& s);
class String {
public:
template<typename t_value>
String::String(t_value value) {
std::ostringstream oss;
oss << value;
_str = oss.str();
}
private:
std::string _str;
}
这适用于定义了运算符的任何类型<<
。任何没有流操作符的类都会出现问题。编译器错误会很好,但我得到的是无限递归,因为 C++ 尝试使用我的全局<<
运算符来尝试转换为我的 String 类型。
我的主要目标是编写这样的代码
class Foo {
int _memberWithUnderscoreInName;
}
String s = Foo();
并在构造函数中获得编译器错误而不是无限循环。
有一个简单的解决方案吗?