Дизайн интерфейсов std :: basic_fstream и std :: unique_lock

Я сравниваю два класса, потому что они оба ассоциируются с чем-то другим. std::basic_fstream должен ассоциироваться с файлом, в то время как std::unique_lock должен ассоциироваться с мьютексом. Таким образом, обеспечивая open() метод кажется разумным. Еще, std::unique_lock не предоставляет таких методов. Ленивая инициализация может быть выполнена в любом случае через назначение перемещения. Таким образом, может показаться излишним open() метод. std::basic_fstreamс другой стороны, обеспечивает open() метод. std::basic_fstream существует до C ++ 11, и тогда это единственный способ выполнить отложенную инициализацию. Оставляя в стороне соображения обратной совместимости, std::basic_fstream::open() просто быть удаленным? Или это все еще должно быть там, чтобы операция могла провалиться на самом деле? Обратите внимание, что операция открытия (связывания) всегда завершается успешно std::unique_lock (не путать с операцией блокировки).

0

Решение

Ваше последнее предложение фактически содержит подсказку:open (ассоциированная) операция всегда завершается успешно std::unique_lockMsgstr «Это позволяет объявить open-ness как инвариант класса, установить его в конструкторе и генерировать исключения при редких сбоях. По сравнению с файлами: их открытие может и не получится, поэтому объявление open как инварианта класса не делает» там тоже не работает.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]