Существует три типа ресурсов, которые вы дублируете между двумя вашими функциями: имена файлов;файловые потоки и содержимое самих файлов.Лучший способ сократить это дублирование и разделить эти ресурсы между вашими функциями на самом деле зависит от того, что вы делаете с потоками.
Несмотря на это, я не уверен, что вам нужно глобализировать ваши данные.Для вас может быть лучше передать все, что, по вашему мнению, вы будете совместно использовать между двумя функциями, в качестве параметров:
void func1(ifstream & infile, ofstream & outfile)
{
......
}
void func2(ifstream & infile, ofstream & outfile)
{
......
}
int main()
{
ifstream infile;
ofstream outfile;
infile.open(" input.txt");
outfile.open("output.txt");
func1(infile, outfile);
func2(infile, outfile);
return 0;
}
Теперь, когда ваша функция main
заботится о присвоении имен, объявлении и открытиифайлы, подфункции могут сосредоточиться на своих реальных задачах.Кроме того, вы можете вызывать func1
и func2
с файлами, отличными от «input.txt» и «output.txt», без необходимости вносить изменения в сами функции.Наличие объектов в области действия функции, а не в глобальном масштабе, также облегчает отслеживание происходящего, поскольку становится более понятным, какой код работает с какими данными.
(Обратите внимание, что поскольку время жизнипотоки охватывают func1
и func2
, то, что вы делаете с ними в одном, будет влиять на другое. В частности, позиции поиска потоков будут сохраняться. Это не будет иметь место, если вы открыли их зановов каждой подфункции или передается в копиях потоков, пропуская &
.)