Наличие класса без членов данных хороший вариант для манипулирования файлами? - PullRequest
3 голосов
/ 17 января 2010

У меня есть файл с сохраненными данными, к которым иногда нужно обращаться, записывать, стирать и т. Д. При запуске программы. Я решил написать класс SavedDataHandler для достижения этой цели. В настоящее время я использую класс fstream.

Я подумал, чтобы один элемент данных был самим fstream, открывая его в конструкторе и закрывая в деструкторе. Однако я понял, что различные функции, вызываемые в SavedDataHandler, по-разному открывают поток (устанавливают разные флаги и т. Д.), Поэтому я решил не идти по этому пути.

Вместо этого у меня просто есть static const std::string с именем файла, с открытыми функциями-членами, которые обрабатывают открытие и закрытие файла так, как им нужно. Производительность не проблема.

Является ли этот маршрут допустимым вариантом? Поскольку в нем нет элементов данных, предоставление конструктора даже не требуется. Это просто класс, который содержит функции (и одну статическую константу), причем функции работают с ресурсом, а не с элементом данных.

Ответы [ 2 ]

4 голосов
/ 17 января 2010

Хм, класс fstream уже сам по себе является классом-оболочкой для дескриптора операционной системы для файла. Если вы не можете придумать способ добавить функциональность в свою собственную оболочку с помощью fstream, воспринимайте это как подсказку, что вам на самом деле не нужна оболочка.

Не заворачивайте (или не наследуйте) только потому, что можете.

2 голосов
/ 17 января 2010

Ну, в некоторых проектах обертывание имеет важное значение.Просто перестаньте думать, если позже вам понадобится, например, изменить библиотечные библиотеки ввода / вывода (не знаю, зачем вам это нужно, поскольку библиотеки C ++ оптимизированы и ISO).Что бы вы сделали тогда?Изменить все вызовы с fstream на YourNewSuperMegaLib :: SuperFileSystem :: MegaFileStream?Если вам нужна простота, я бы просто унаследовал fstream и в конструкторе, пропустил требуемые режимы открытия и вызвал супер-конструктор в соответствии с требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...