перегрузка “<<” со структурой (никакой класс) стиль суда

У меня есть структура, что я хотел бы произвести использование любого 'станд.:: суд' или некоторый другой поток вывода. Действительно ли это возможно, не используя классы?

Спасибо

#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;
}

Я попробовал другой синтаксис', но я, может казаться, не заставляю его работать.

5
задан monkeyking 27 April 2010 в 06:23
поделиться

2 ответа

Возможно, это ошибка копирования и вставки, но есть несколько ошибок. Во-первых, бесплатные функции не могут быть 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;
}
11
ответ дан 18 December 2019 в 08:27
поделиться

По сути, структуры являются классами в C ++, за исключением того, что их члены по умолчанию являются общедоступными, а не закрытыми. Возможны незначительные различия, связанные с реализацией, из-за оптимизации, но они не влияют на стандартную функциональность, которая одинакова для классов и структур в 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;
}
8
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: