Как лучше всего сохранить функцию от закрытия файла?

Итак, я пытался быть более строгим в создании любых переданных параметров, которые не должны быть затронуты функцией const,

Одна ситуация, с которой я столкнулся в некоторых моих кодах на C ++, — это случай, когда объект может измениться, но я хочу «заблокировать» функции от доступа к определенной ключевой функциональности объекта. Например, для std::ifstream дескриптор файла, я могу запретить функции закрывать файл.

Если я передам это как const &, const Кажется, часть мешает мне выполнить стандартный ввод / вывод файла.

например Я хочу что-то вроде

void GetTags(Arr<std::string> & tags, std::ifstream const& fileHandle)

…но написано таким образом, чтобы разрешить файловый ввод / вывод, но не операции открытия / закрытия.

Есть ли хороший / надежный способ сделать это в C ++? Что будет считаться лучшей практикой?

2

Решение

Это уже было сделано для вас стандартным дизайном библиотеки: передайте ссылку на база учебный класс std::istream вместо этого, который не имеет понятия открытия или закрытия — он выставляет только интерфейс потока.

void stream_me(std::istream & is);

std::ifstream is("myfile.txt");
stream_me(is);
6

Другие решения

На вашем месте я бы просто передал std::istream вместо.

1

Вы можете обернуть ifstream в объект, который предоставляет только те функции, которые вы хотите, чтобы вызывающий мог использовать.

Однако, если у вас есть куча разных функций, каждая с разным подмножеством функциональности ifstream, вы получите множество разных классов-оболочек; так что я не рассматриваю это как общее решение.

0

Я думаю, что лучшим способом было бы обернуть ifstream в новом классе, который имеет только функции-члены, соответствующие желаемой функциональностиGetTags иметь доступ к. Тогда передайте что не то ifstream в качестве второго аргумента GetTags,

0