我正在写一些笔记,为了编译,我为operator<<
添加了ostream
重载函数作为template
。它编译得很好但是,因为我在class type
的{{1}}内重载了运算符<>
并将该类型作为重载函数的第二个输入传递,所以它不会使用新的我从现在开始定义的每个类的运算符?
这是我的代码供参考。
它纯粹是出于注意目的,它没有任何功能。
template
答案 0 :(得分:0)
对于SFINAE来说,我自己是一个新手,但看起来你是对的,这个模板将用于不提供getsmth()
的课程,即使身体不是&{ #39;编译。你可以通过SFINAE防止这种情况发生,但这似乎按预期工作:
template <class T, typename = decltype(T().getSomething())>
std::ostream& operator<< (std::ostream& s, T& x){
s << x.getSomething();
return s;
}