作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个自定义的 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/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!