2010-05-02 3 views
1

как вопрос говорит, я хочу написать данные данных типа данных класса, возможно, в файл, используя ifstream в C++. Нужна помощь.Как написать произвольный тип данных в файл с помощью ifstream?

+4

Вы хотите написать в поток ifstream? По общему признанию, мой C++ немного ржавый, но это кажется невозможным. –

+0

Да, вам нужно либо 'ofstream', либо' fstream'. – stakx

ответ

7

Для произвольного класса, скажем, 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

+1. Единственное, что я хотел бы добавить, это то, что если не нужен публичный метод 'write' в самом классе, можно объявить глобальный перегруженный' operator << '(_inserter_) как' friend' внутри класса а затем либо сделать 'write' private, либо переместить его код непосредственно в вставку. – stakx

+0

Благодарим вас за предложение @stakx. Я использовал его как «друга» без «записи», но обнаружил, что писать «point.» было утомительно. Должен признать, что я никогда не рассматривал частный вариант 'write'. Думаю, как только вы решите использовать «друга», повторный префикс - это меньше усилий, чем частный 'write'. –

+0

На самом деле, я нахожу ваше решение очень чистым, и публичный 'write', конечно, не болит, особенно. так как он сообщает другому разработчику, что для этого класса, вероятно, доступен и '' '' inserter. Я лично не большой друг «друга», но думал, что нужно упомянуть для полноты. ;) – stakx