Почему fstream не наследуется от ifstream и ofstream в C++?

ifstream и ofstream для ввода и вывода в файл, и fstream может выполнять задачу обоих из них, но не наследуется ни от одного из ifstream и ofstream, это повторение кода или что-то еще?

Hierarchy of fstream

1 ответов


встроенные расширенные функции используются для основных операций (например, "поместить символ в буфер"), поэтому основные накладные расходы имеют тенденцию быть одним вызовом функции на простой объект (целое число, строка и т. д.) записанный (или прочитанный) плюс один вызов функции в буфер переполнение.

так что это может быть причиной.

Я думаю, что вы мог бы извлечение общих функций ввода-вывода файлов в mixin, но для этого потребуется virtual наследование, чтобы разрешить наследование алмазов, которое добавило бы дополнительную косвенность при доступе к базовому basic_filebuf.

кроме того, как файл режим чтения/записи обычно не может быть изменен после открытия файла, будучи в состоянии бросить fstream to ifstream или ofstream создаст несоответствия, поскольку вы можете получить записываемый ifstream или читаемого ofstream.