Как с помощью только стандартной библиотеки преобразовать функцию с аутпут параметром в функцию возвращающую значение, не создавая дополнительных функций и классов?
Здравствуйте, ankorol, Вы писали:
A>Как с помощью только стандартной библиотеки преобразовать функцию с аутпут параметром в функцию возвращающую значение, не создавая дополнительных функций и классов?
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, ankorol, Вы писали:
A>>Как с помощью только стандартной библиотеки преобразовать функцию с аутпут параметром в функцию возвращающую значение, не создавая дополнительных функций и классов?
A>всмысле нужен адаптер?
A>наверное только С++0х лямбдой A>
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, ankorol, Вы писали:
A>>Как с помощью только стандартной библиотеки преобразовать функцию с аутпут параметром в функцию возвращающую значение, не создавая дополнительных функций и классов?
A>всмысле нужен адаптер?
A>наверное только С++0х лямбдой A>
A>[]()->int { int x; foo(x); return x; }
A>
А разве лямбда не создаст дополнительную функцию или класс ?
Здравствуйте, ankorol, Вы писали:
A>Как с помощью только стандартной библиотеки преобразовать функцию с аутпут параметром в функцию возвращающую значение, не создавая дополнительных функций и классов?
void f(T&);
T _tmp_; //дополнительные переменные вроде не запртили :)
T some_var;
some_var = (f(_tmp_), _tmp_);// the magic :)
Здравствуйте, TheBeard, Вы писали:
TB>Тогда надо делать f не функцией, а функтором. В конструкторе передавать ссылку на поток, а чтение делать в перегруженном operator().
Все верно, мне всего лишь хотелось чтобы такой функтор уже был в STL...
Здравствуйте, ankorol, Вы писали:
A>Здравствуйте, TheBeard, Вы писали:
TB>>А std::copy() в сочетании с input iterators не прокатит?
A>input iterator не произвольного доступа, тоесть я могу ограничить его каким-то кол-вом, а только концом ввода:
A>
A>istream_iterator<int>(cin) + NumbersToRead; // ошибка: итератор не произвольного доступа
A>
Здравствуйте, ankorol, Вы писали:
A>Здравствуйте, TheBeard, Вы писали:
TB>>Тогда надо делать f не функцией, а функтором. В конструкторе передавать ссылку на поток, а чтение делать в перегруженном operator().
A>Все верно, мне всего лишь хотелось чтобы такой функтор уже был в STL...
Здравствуйте, ankorol, Вы писали:
TB>>Тогда std::copy_n()
A>copy_n() это уже С++0х вроде
Когда нужный алгоритм есть в C++0x, TR1 или Boost, но по условию задачи ни то, ни другое, ни третье использовать нельзя, правильное решение состоит в использовании собственной карманной библиотеки полезных шаблонов. В которую тащить нужные шаблоны из TR1 и Boost’а.
C>Когда нужный алгоритм есть в C++0x, TR1 или Boost, но по условию задачи ни то, ни другое, ни третье использовать нельзя, правильное решение состоит в использовании собственной карманной библиотеки полезных шаблонов. В которую тащить нужные шаблоны из TR1 и Boost’а.
В данном случае я бы затруднился придумать абстракцию, достаточно универсальную для библиотеки. Функтор ad hoc выглядит наиболее простым решением.
Здравствуйте, TheBeard, Вы писали:
C>>Когда нужный алгоритм есть в C++0x, TR1 или Boost, но по условию задачи ни то, ни другое, ни третье использовать нельзя, правильное решение состоит в использовании собственной карманной библиотеки полезных шаблонов. В которую тащить нужные шаблоны из TR1 и Boost’а.
TB>В данном случае я бы затруднился придумать абстракцию, достаточно универсальную для библиотеки. Функтор ad hoc выглядит наиболее простым решением.
В данном случае исходная задача — прочитать из входного потока заданное количество объектов известного типа. Это наиболее правильно решается алгоритмом copy_n. Абстракция, вынесенная в тему, не нужна.