Форум программистов, компьютерный форум CyberForum.ru

Как читать целые числа из файла в аргумент функции без временных переменных? - C++

Восстановить пароль Регистрация
 
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 101
17.05.2014, 19:35     Как читать целые числа из файла в аргумент функции без временных переменных? #1
Следующая программа читает первые 2 целых числа, записанные в файле file.txt и передает их как аргументы в функцию foo:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
void foo(int a,int b) {
    // делаем что-то с a и b;
}
int main() {
    std::ifstream ifs("file.txt");
    
    int temp_1,temp_2;
    ifs >> temp_1 >> temp_2;
    foo(temp_1,temp_2);
 
    ifs.close();
    return 0;
}
Как, не используя временных переменных, сразу передавать числа из файла в аргументы функции? То есть убрать строки:
C++
1
2
int temp_1,temp_2;
ifs >> temp_1 >> temp_2;
И оставить лишь одну строку(в которой сразу чтение и передача в аргумент). Нужна конструкция что-то на подобии такой(приведенная ниже, естественно, нерабочая):
C++
1
foo(ifs >>,ifs >>);
Изменять функцию и её прототип нельзя. То есть решение, с изменением прототипа функции и передачей ifs в функцию с прототипом:
C++
1
void foo2(std::ifstream &arg);
и последующим извлечением переменных не годится. Числа в файле принимают значения из диапазона int, или меньше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 19:35     Как читать целые числа из файла в аргумент функции без временных переменных?
Посмотрите здесь:

C++ Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию.
Как извлечь корень из числа без функции с++ ? C++
Надо читать числа из файла в динамический массив C++
C++ Создание области определния для очистки временных локальных переменных
C++ Из одного файла считать целые числа, в другие файлы записать четные и нечетные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.05.2014, 20:00     Как читать целые числа из файла в аргумент функции без временных переменных? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
никак.
хотя если написать функцию, которая из стрима читает инт и возвращает его, то получится следующее:
C++
1
foo(readInt(ifs), readInt(ifs));
так пойдет?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.05.2014, 20:08     Как читать целые числа из файла в аргумент функции без временных переменных? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
int input(ifstream &ifs)
{
    int t;
    ifs>>t;
    return t;
}
 
...
foo(input(ifs),input(ifs));
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 101
17.05.2014, 20:12  [ТС]     Как читать целые числа из файла в аргумент функции без временных переменных? #4
Интересное решение, но все таки хочется способ, который сократит объем строк кода, а не увеличит его. Из-за введения дополнительной функции придется вспоминать что она делает, и встраивать её в каждую аналогичную программу не комильфо.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.05.2014, 20:17     Как читать целые числа из файла в аргумент функции без временных переменных? #5
Еще можно перегрузить >> но с учетом того, что он бинарный,
надо использовать какой-нибудь фиктивный тип:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class T
{
};
int operator>>(istream &ifs,T)
{
    int t;
    ifs>>t;
    return t;
}
int foo(int a,int b)
{
    return a+b;
}
int main( void )
{
    T bb;
    int r=foo(cin>>bb,cin>>bb);
    system("pause");
    return 0;
}
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 101
17.05.2014, 20:18  [ТС]     Как читать целые числа из файла в аргумент функции без временных переменных? #6
Цитата Сообщение от DU Посмотреть сообщение
написать функцию, которая из стрима читает инт и возвращает его
Цитата Сообщение от zss Посмотреть сообщение
Еще можно перегрузить >> но с учетом того, что он бинарный,
На основании Вашей идеи придумал такой подход для стандарта c++11:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
 
void foo(int a,int b) {
    // делаем что-то с a и b;
}
int main() {
    std::ifstream ifs("file.txt");
    
    foo( [](std::ifstream &pfs) { int t; pfs>>t; return t; }(ifs), [](std::ifstream &pfs) { int t; pfs>>t; return t; }(ifs) );
 
    ifs.close();
    return 0;
}
Нужно что-то подобное для стандарта C++98.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных?
Еще ссылки по теме:

C++ Указатель на имя файла как аргумент функции. Как реализовать?
как читать из файла строки и числа C++
C++ Как организовать вывод двумерного массива (целые числа) из текстового файла?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных? #7
если ваша цель - миниум кода - то вариант с временнимы переменными - самый лаконичный и простой.
если таких чтений в коде много - то тогда можно задуматься о написании хелперных фунций вроде тех,
которые тут уже озвучили. если нет - то это изврат.
Yandex
Объявления
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных?
Ответ Создать тему
Опции темы

Текущее время: 09:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru