有没有办法创建一个接受任何给定版本的函数 模板类?
e.g。这有效:
ostream& operator << (ostream &out,const Vector<int>& vec);
但这不是:
ostream& operator << (ostream &out,const Vector& vec);
是否有可能让第二行以某种方式为任何版本的矢量工作?
例如vector<int>
和vector<double>
,而无需编写2个单独的函数?
添加到问题:
我做了op&lt;&lt;像你建议的模板功能。为了使它成为vector类的友元函数,我尝试将以下内容添加到Vector类定义中,但它不起作用:
friend ostream& operator << (ostream &out, const Vector<T>& vec);
有什么想法可以解决它吗?
答案 0 :(得分:5)
当然,将其设为模板功能:
template <typename T>
ostream& operator << (ostream &out,const Vector<T>& vec);
答案 1 :(得分:2)
template <class T>
ostream& operator << (ostream &out,const Vector<T>& vec);
答案 2 :(得分:1)
正如已经指出的那样,这应该有用:
template <typename T>
ostream& operator << (ostream &out,const Vector<T>& vec) {
// body here
}
至于朋友的要求,最容易处理:
template <typename T>
ostream& operator << (ostream &out,const Vector<T>& vec) {
vec.print_on( out );
return out;
}
然而,通常我会想到这样的任何输出操作符需要访问类的内部,以便在Vector
类中显示错误。它实际上只需要使用公共接口来进行显示。
另一件事是您可能还想模拟输出流本身,以便保留其类型:
template <typename O, typename C, typename T>
std::basic_ostream<O, C>& operator << (std::basic_ostream<O, C> &out,const Vector<T>& vec) {
vec.print_on( out );
return out;
}
Vector
的{{1}}仍然可以使用print_on
。