#c #design-patterns
Вопрос:
У меня есть фрагмент кода, который используется для обработки строк текстовых файлов. Эта функция processFile
вызывается для каждого файла в каталоге
void processFile(const std::stringamp; sourceFileName) {
std::ifstream sourceFile;
sourceFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
try {
sourceFile.open(sourceFileName);
if (sourceFile.is_open()) {
while (sourceFile.peek() != EOF) {
std::string line;
std::getline(sourceFile,line);
// process line here
}
sourceFile.close();
}
}
catch (const std::ifstream::failureamp; exception) {
std::cout << "some exception text here" << std::endl;
return;
}
catch (...) {
std::cout << "some another exception text here" << std::endl;
}
}
Помимо файлов, мне также нужно считывать данные из каналов и сокетов.
Какой шаблон проектирования можно использовать для абстрактного открытия, чтения и закрытия объекта? Не могли бы вы привести мне, пожалуйста, несколько примеров?
Комментарии:
1. Является
// process line here
ли деталь одинаковой для каждого типа входных данных? Поместите его в другую функцию, которая может быть вызвана из разных функций, обрабатывающих разные входные данные.2. Также обратите внимание, что в системах POSIX (таких как Linux и macOS) каналы и сокеты обрабатываются с помощью дескрипторов, и вы можете использовать одну и ту же функцию для чтения из обоих.