過負荷にしようとしています
<<
オペレーター。例えば
cout << a << "" << b << ""; //この行を変更することは許可されていません
私はそれをフォーマットで印刷しなければなりません
<literal_valueof_a><"\n>
<literal_valueof_b><"\n">
<"\n">
文字列を引数として<<演算子をオーバーロードしようとしましたが、機能しません。だから私は文字通りだと思います
「」
文字列ではありません。そうでない場合、それは何ですか。そしてそれを過負荷にする方法は?親切に助けてください。
完全なコード
//Begin Program
// Begin -> Non - Editable
#include <iostream>
#include <string>
using namespace std;
// End -> Non -Editable
//---------------------------------------------------------------------
// Begin -> Editable (I have written )
ostream& operator << (ostream& os, const string& str) {
string s = " ";
if(str == " ") {
os << '\n';
}
else {
for(int i = 0; i < str.length(); ++i)
os << str[i];
}
return os;
}
// End -> Editable
//--------------------------------------------------------------------------
// Begin -> No-Editable
int main() {
int a, b;
double s, t;
string mr, ms;
cin >> a >> b >> s >> t ;
cin >> mr >> ms ;
cout << a << " " << b << " " ;
cout << s << " " << t << " " ;
cout << mr << " " << ms ;
return 0;
}
// End -> Non-Editable
//End Program
入力と出力入力
30 20 5.6 2.3 hello world
出力
30
20
5.6
2.3
hello
world
" "
は長さ1の文字列リテラルであるため、タイプはconst char[2]
です。std::string
関係ありません。
したがって、理論的には、次のようにオーバーロードできます。
auto& operator<<(std::ostream& os, const char (&s)[2]) {
return os << (*s == ' ' && !s[1] ? +"\n" : +s);
}
それは他のすべての過負荷に勝るが、今では物事は本当に毛むくじゃらになる。問題はsome_ostream << " "
、テンプレートであっても珍しいことではなく、標準関数の呼び出しに解決されなくなったことです。これらのテンプレートは、影響を受ける翻訳単位と影響を受けない翻訳単位で定義が異なるため、単一定義規則に違反します。
できれば、現在スペース文字をストリーミングしているコードを変更してください。
または、必要に応じて改行に変換する独自のストリームバッファを作成します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加