我正在写一些笔记,并且为了编译起见,我为ostream
添加了operator<<
重载函数,作为template
。它编译得很好,但是,由于我把class type
中的class type
重载到template
的<>
中,并将该类型作为重载函数的第二个输入传递,是不是将它从现在开始用于EVERY类的新运算符? 这是我的代码以供参考。 它纯粹是为了便于说明,它没有功能。当我将运算符重载为模板时会发生什么?
template <class type>
ostream& operator<< (ostream& s, type x){
s << x.getsmth();
//...
}
*“不会用它为每一个类,我从现在开始定义新的运营商? “*是的,基本上。这就是为什么添加这样的模板超载是不明智的。 –
当然,如果没有找到那里调用的方法,编译器会抱怨疯狂。我也这么想。 –
不适用于每个类,只适用于那些没有其他重载更好(例如,特定于类)并且与您定义的模板位于同一名称空间中(由于[ADL](http:// en .cppreference.com/w/cpp/language/adl)规则)。 –