c++ - 为另一个类专门化模板类的运算符<<

标签 c++ class templates specialization

我有一个自定义的 Vector 模板类,它基本上是这样的:

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

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

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

最佳答案

只需实现一个特殊版本的 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> 编写了一个版本类型。

关于c++ - 为另一个类专门化模板类的运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42969088/

相关文章:

javascript - 如何在指令模板中包含模板?

c++ - 调试断言失败 vc\include\vector vector iterator + offset out of range in chamferMatching Opencv

c++ - 共享内存段键突然改变

c++ - 指向指针的指针有什么意义?

java - 如何在Java中使用参数返回一个新对象?

templates - 将 Drupal 7 中的 front.tpl 用于另一个页面

c++ - 普通查找和隐藏

php需要从内部方法调用类

c++ - Qt:找不到体系结构 x86_64 的符号

c++ - C++中如何指定模板类实现某些方法?