在我看來,定義運算符(運算符<)要直接使用字符串比使用ostringstreams然後轉換回字符串更優雅。有沒有一個原因,爲什麼c + +不開箱即用?爲什麼字符串類沒有預定義<<運算符(運算符<<),以便字符串像ostringstream一樣工作?
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
template <class T>
string& operator<<(string& s, T a) {
ostringstream ss;
ss << a;
s.append(ss.str());
return s;
}
int main() {
string s;
// this prints out: "inserting text and a number(1)"
cout << (s << "inserting text and a number (" << 1 << ")\n");
// normal way
ostringstream os;
os << "inserting text and a number(" << 1 << ")\n";
cout << os.str();
}
好,那你必須實現所有的操縱(你知道,你用來設置字段寬度的小功能)重新開始。代碼重複是一個可怕的浪費。 – 2013-02-10 07:04:02
此外,使用新的C++ 11標準,它不是一個問題,因爲您可以將['operator +'](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B)與['的std :: to_string'](http://en.cppreference.com/w/cpp/string/basic_string/to_string)。 – 2013-02-10 07:06:11