专用运算符<<模板类的模板类的另一个类

Specializing operator<< of a template class for another class

本文关键字:lt 另一个 运算符 专用      更新时间:2023-10-16

我有一个自定义的矢量模板类,基本上看起来像这样:

template <typename T>
class Vector{
...
friend ostream& operator<<(ostream& os, const Vector&<T> rop);
};

之后,我定义了一个类 Person。我想专门化运算符<<用于人员向量(或向量(。

最好的方法是什么?提前感谢!

只需为类型实现Vector的专用版本Person

class Person
{
};
template <typename T>
class Vector{
friend ostream& operator<<(ostream& os, const Vector<T> &rop);
};
template<>
class Vector<Person>
{
    friend ostream& operator<<(ostream& os, const Vector<Person> &rop);
};

如果你Vector<T>有其他方法,你不想在Vector<Person>中使用,只需将它们排除在专业化之外。

运行示例

编辑:要回答评论中的问题:是的,有不同的方法,只需像这样定义类之外的运算符:

template <typename T>
class Vector{
};
template<typename T>
std::ostream& operator<<(std::ostream &os, Vector<T> &prop)
{
    return os;
}
template<>
std::ostream& operator<<(std::ostream &os, Vector<Test> &prop)
{
    return os;
}

并专门针对Vector<Person>类型开发一个版本。

相关文章: