私はいくつかのノートを書いています。ちょうどコンパイルのために、私はとしてostream
のためにoperator<<
オーバーロードされた関数を追加しました。これはうまくコンパイルされますが、class type
のオペレータに<>
のtemplate
がオーバーロードされ、そのタイプがオーバーロードされた関数の2番目の入力として渡されたので、今から定義するすべてのクラスに対してnew演算子を使用しませんか? 参考のために私のコードです。 純粋にメモの目的であり、機能はありません。演算子をテンプレートとしてオーバーロードするとどうなりますか?
template <class type>
ostream& operator<< (ostream& s, type x){
s << x.getsmth();
//...
}
*「それは私が今から定義EVERYクラスのnew演算子を使用しないのだろうか? "*はい、本質的に。だからこそテンプレート化されたオーバーロードを追加するのは賢明ではありません。 –
もちろん、そこで呼び出されたメソッドが見つからないと、コンパイラは狂気のように文句を言うでしょう。私もそう思っていました。 –
EVERYクラスではなく、(クラスに固有の)より一層良いオーバーロードを持たず、定義したテンプレートと同じ名前空間にある(ADL(http:// en) .cppreference.com/w/cpp/language/adl)のルール)。 –