我可以在现有类中重载现有的函数/运算符吗?
我试图这样做:
#include <iostream>
#include <string>
using namespace std;
string& string::operator<<(const string& str) {
this->append(str);
}
但是这给了我错误:
test.cpp:5: error: too few template-parameter-lists
我该怎么做?或者我不能?
答案 0 :(得分:6)
除非修改该类的定义,否则无法将成员函数添加到类中。请改用免费功能:
string& operator<<(string & lhs, const string & rhs) {
return lhs += rhs;
}
答案 1 :(得分:0)
我遵从Benjamin的答案,在string
对象上创建类似于流的界面。但是,您可以使用stringstream
代替。
#include <sstream>
std::istringstream ss;
ss << anything_you_want;
std::string s = ss.str(); // get the resulting string
ss.str(std::string()); // clear the string buffer in the stringstream.
这为您提供了string
所需的类似流的界面,而无需定义新功能。
此技术通常可用于扩展string
的功能。也就是说,定义一个提供扩展功能的包装类,包装类也提供对底层string
的访问。
答案 2 :(得分:0)
使用
std :: ostringstream
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
std::ostringstream ss;
ss << "Hello" << " " << "world";
std::string s = ss.str();
ss.str(std::string());
cout << s << endl;
return 0;
}