我想要一个类似下面的课程:
Class Test {
Test();
~Test();
...
}
我希望能够使用以下声明:
std::string str;
Test t;
str = t;
我该怎么办?我应该覆盖to_string吗?如果是,似乎无法从std :: string类继承。 或者我必须覆盖特殊运算符? 指针分配怎么样?如下所示:
std::string str;
Test* t = new Test();
str = t;
答案 0 :(得分:7)
您可以向std::string
提供用户定义的转换运算符:
class Test {
//...
public:
operator std::string () const {
return /*something*/;
}
};
这样可以将Test
对象隐式转换为std::string
。
答案 1 :(得分:2)
虽然在C ++中有可能,但通常不建议继承标准类,有关详细信息,请参阅Why should one not derive from c++ std string class?。
我想知道,
的分配功能是什么str = t;
str是std :: string类型,t是Test类型。那么该分配的预期价值是多少?没有人能猜到。我建议明确调用转换方法或运算符以获得代码清晰度。
这会使您的示例看起来像:
str = t.convertToString();
或更标准的方法是实现流操作符,这使得
str << t;
(注意,如果str是流类型,此示例有效,如果是字符串,则需要更多代码,请参阅C++ equivalent of java.toString?。)
但是,如果你真的希望它在没有转换方法的情况下工作,你可以覆盖Test的字符串赋值运算符:
class Test {
public:
operator std::string() const { return "Hi"; }
}
虽然这是您问题的完美解决方案,但从长远来看,可能会出现无法预料的问题,详见链接文章。