【发布时间】:2017-01-18 18:12:05
【问题描述】:
我正在写一些笔记,只是为了编译,我为ostream添加了一个operator<<重载函数作为template。它编译得很好,但是,因为我在 <> 的 template 中重载了运算符 class type 并将该类型作为重载函数的第二个输入传递,所以它不会对我的每个类都使用新运算符从现在开始定义?
这是我的代码供参考。
它纯粹是为了笔记的目的,它没有任何功能。
template <class type>
ostream& operator<< (ostream& s, type x){
s << x.getsmth();
//...
}
【问题讨论】:
-
“它不会对我从现在开始定义的每个类都使用 new 运算符吗?” 基本上是的。这就是为什么添加这样一个模板化的重载是不明智的。
-
当然,如果编译器没有找到调用的方法,它会发疯似的抱怨。我就是这么想的。
-
不适用于每个类,仅适用于那些没有另一个具有更好匹配的重载(例如特定于该类)并且与您定义的模板位于相同命名空间的那些(由于@987654321 @ 规则)。