問題:デフォルトの<<
演算子をvector<int> v
変数にオーバーロードすると、cout << v
は各要素を順番に出力します。明らかにこれは、要素のいずれかのタイプのために働く必要がありますprevious questionテンプレートを定義する/しないC++のオーバーロード演算子
template<typename T>
std::ostream& operator<<(std::ostream& s, std::vector<T> t) {
s << "[";
for (std::size_t i = 0; i < t.size(); i++) {
s << t[i] << (i == t.size() - 1 ? "" : ",");
}
return s << "]" << std::endl;
}
にジェイソン・アイバーソンによって提案されたようにここで私は私がint
を持つ唯一の心配があるため、一つの選択肢を見て、私は
ostream& operator << (ostream &os, const vector<int> &v){
for (auto x: v){
os << " " << x;
}
return os;
}
としての機能を簡素化
それはうまく動作します。
は、だから私の質問は限りvector<int> v
に関しては
- で、
template
を使用していないの注意点は何ですか? - 汎用性とは別に、Jasonのソリューションの利点は何ですか?
ありがとう!
深い思考: 上記の質問が悪い言葉で表現して、コメントのおかげで、私はそれを修正してくださいすることは理にかなって考えています。 質問:C++でtemplate
シングルタイプの関数で十分な場合はどうすればいいですか? @Marco Aと@Walterから
クレジットは、この質問を閉じることができました。
「テンプレート」は何ですか?もしそうなら、あなたはなぜそれを求めているのですか? – Walter
あなたは過負荷を書く必要はありませんが、それ以来の利点は何ですか? – NathanOliver
@Walter 'template'は知っていますが、' T'型を指定しない方が一般的であることを除けば、その利点を理解したいです。 – wenduowang