重载“<<”结构(没有类)cout风格

时间:2010-04-27 06:23:23

标签: c++ stl operator-overloading

我有一个结构,我想使用'std :: cout'或其他输出流输出。 这可能不使用类吗?

由于

#include <iostream>
#include <fstream>
template <typename T>
struct point{
  T x;
  T y;
};

template <typename T>
std::ostream& dump(std::ostream &o,point<T> p) const{
  o<<"x: " << p.x <<"\ty: " << p.y <<std::endl;
}


template<typename T>
std::ostream& operator << (std::ostream &o,const point<T> &a){
  return dump(o,a);
}


int main(){
  point<double> p;
  p.x=0.1;
  p.y=0.3;
  dump(std::cout,p);
  std::cout << p ;//how?
  return 0;
}

我尝试了不同的语法'但我似乎无法使其正常工作。

2 个答案:

答案 0 :(得分:11)

也许这是一个复制粘贴错误,但只有一些问题。首先,免费功能不能const,但您已标记为dump。第二个错误是dump没有返回值,这也很容易纠正。修复这些,它应该工作:

template <typename T> // note, might as well take p as const-reference
std::ostream& dump(std::ostream &o, const point<T>& p)
{
    return o << "x: " << p.x << "\ty: " << p.y << std::endl;
}

答案 1 :(得分:8)

对于所有意图和目的,结构是C ++中的类,除了它们的成员默认为public而不是private。由于优化,可能存在微小的特定于实现的差异,但这些差异对标准功能没有影响,对于C ++中的类和结构,这些功能是相同的。

其次,为什么有“转储”功能?只需在流操作符中直接实现它:

template<typename T>
std::ostream& operator << (std::ostream& o, const point<T>& a)
{
    o << "x: " << a.x << "\ty: " << a.y << std::endl;
    return o;
}