Могу ли я перегрузить существующую функцию/оператор в существующем классе?
Я пытался сделать:
#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
Как я могу это сделать? Или я не могу?
Ответ 1 · рейтинг 6 · Benjamin Lindley
Вы не можете добавлять функции-члены в класс, пока не измените определение этого класса. Вместо этого используйте бесплатную функцию:
string& operator<<(string & lhs, const string & rhs) {
return lhs += rhs;
}
Ответ 2 · jxh
Я полагаюсь на ответ Бенджамина для создания потокового интерфейса для объекта 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.
Ответ 3 · Bandula Dharmadasa
Использовать
std::острингстрим
#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;
}
https://onlinegdb.com/rkanzeniI