У меня есть структура, что я хотел бы произвести использование любого 'станд.:: суд' или некоторый другой поток вывода. Действительно ли это возможно, не используя классы?
Спасибо
#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;
}
Я попробовал другой синтаксис', но я, может казаться, не заставляю его работать.
Возможно, это ошибка копирования и вставки, но есть несколько ошибок. Во-первых, бесплатные функции не могут быть 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;
}
По сути, структуры являются классами в 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;
}