как вопрос говорит, я хочу написать данные данных типа данных класса, возможно, в файл, используя ifstream в C++. Нужна помощь.Как написать произвольный тип данных в файл с помощью ifstream?
ответ
Для произвольного класса, скажем, Point
, вот довольно чистый способ записать его в поток.
#include <iostream>
class Point
{
public:
Point(int x, int y) : x_(x), y_(y) { }
std::ostream& write(std::ostream& os) const
{
return os << "[" << x_ << ", " << y << "]";
}
private:
int x_, y_;
};
std::ostream& operator<<(std::ostream& os, const Point& point)
{
return point.write(os);
}
int main() {
Point point(20, 30);
std::cout << "point = " << point << "\n";
}
+1. Единственное, что я хотел бы добавить, это то, что если не нужен публичный метод 'write' в самом классе, можно объявить глобальный перегруженный' operator << '(_inserter_) как' friend' внутри класса а затем либо сделать 'write' private, либо переместить его код непосредственно в вставку. – stakx
Благодарим вас за предложение @stakx. Я использовал его как «друга» без «записи», но обнаружил, что писать «point.» было утомительно. Должен признать, что я никогда не рассматривал частный вариант 'write'. Думаю, как только вы решите использовать «друга», повторный префикс - это меньше усилий, чем частный 'write'. –
На самом деле, я нахожу ваше решение очень чистым, и публичный 'write', конечно, не болит, особенно. так как он сообщает другому разработчику, что для этого класса, вероятно, доступен и '' '' inserter. Я лично не большой друг «друга», но думал, что нужно упомянуть для полноты. ;) – stakx
Вы хотите написать в поток ifstream? По общему признанию, мой C++ немного ржавый, но это кажется невозможным. –
Да, вам нужно либо 'ofstream', либо' fstream'. – stakx