当我将运算符作为模板重载时会发生什么?

时间:2016-09-10 22:24:33

标签: c++ templates operators

我正在写一些笔记,为了编译,我为operator<<添加了ostream重载函数作为template。它编译得很好但是,因为我在class type的{​​{1}}内重载了运算符<>并将该类型作为重载函数的第二个输入传递,所以它不会使用新的我从现在开始定义的每个类的运算符? 这是我的代码供参考。 它纯粹是出于注意目的,它没有任何功能。

template

1 个答案:

答案 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;
}

演示:http://cpp.sh/8fyk