专业运营商<<另一个类的模板类

时间:2017-03-23 06:49:57

标签: c++ class templates specialization

我有一个自定义的矢量模板类,基本上如下所示:

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

之后,我定义了一个Person类。我想专门化运营商&lt;&lt;为人的矢量(或矢量)。

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

1 个答案:

答案 0 :(得分:1)

只需为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>中使用其他方法,请将它们留在专业化中。

正在运行example

编辑:要回答评论中的问题:是的,有不同的方法,只需在类之外定义运算符,如下所示:

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>类型的版本。