以下が機能するのはなぜですか?:
template<typename T> class example {
public:
T val;
example() {val=0;}
example operator+(example ob) {
example temp;
temp.val = val+ob.val;
return temp;
}
};
int main() {
example<int> a;
a+a;
return 0;
}
コンパイルを見ていなかったら、演算子のオーバーロードは次のようになっているはずだったと思います。
example<T> operator+(example<T> ob {
example<T> temp;
temp.val = val+ob.val;
return temp;
}
また、メインで以下を変更しようとしました:
example<int> a;
に:
example a;
しかし、「...テンプレート引数がありません...」というエラーが発生しました。私の推測では、クラス定義内で、コンパイラは例を例として扱います。しかし、これは推測であり、どこにも確認できなかったので、ここで質問しようと思いました.