将模板 class 的运算符 << 专门化为另一个 class
Specializing operator<< of a template class for another class
我有一个自定义 Vector 模板 class,它基本上是这样的:
template <typename T>
class Vector{
...
friend ostream& operator<<(ostream& os, const Vector&<T> rop);
};
之后,我定义了一个class人。我想将运算符<<专门用于人员向量(或向量)。
最好的方法是什么?提前致谢!
只需为 Person
类型实施 Vector
的专门版本
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
编辑:回答评论中的问题:是的,有不同的方法,只需在 class 之外定义运算符,如下所示:
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>
类型开发一个版本。
我有一个自定义 Vector 模板 class,它基本上是这样的:
template <typename T>
class Vector{
...
friend ostream& operator<<(ostream& os, const Vector&<T> rop);
};
之后,我定义了一个class人。我想将运算符<<专门用于人员向量(或向量)。
最好的方法是什么?提前致谢!
只需为 Person
Vector
的专门版本
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
编辑:回答评论中的问题:是的,有不同的方法,只需在 class 之外定义运算符,如下所示:
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>
类型开发一个版本。