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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
root4me
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 11
#1

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++

07.08.2014, 19:14. Просмотров 699. Ответов 1
Метки нет (Все метки)

Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них .
В общем есть у меня простой вызов алгоритма вида
C++ (Qt)
1
for_each(sregex_iterator(html_data.begin(),html_data.end(),e),sregex_iterator(),&urls_callback);
Не могу понять , как передать callback'у больше одного аргумента ? То есть если я хочу , допустим , сохранять в vector результаты работы алгоритма . Делать это нужно видимо в callback'e . Но как будто коллбек это унарная функция и как передать в коллбек адрес этого вектора я недогоняю
Вроде нашел , в частности , такой вариант .
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
 
void print_i(int t, std::string separator)
{
   std::cout << t << separator;
}
 
int main()
{
   std::vector<int> elements;
   std::string delim = "\n";
   for_each(elements.begin(), 
            elements.end(),
            std::bind2nd(std::ptr_fun(&print_i),delim));
   return 0;
}

Кроме bind2nd мне эту архисложную проблему не решить никак ? Или я в принципе неправ и все работает совсем по-другому :/ ??
P.S. : Как понимаю , еще можно засунуть lambda . Но мне хочется понять именно передачу аргументов callback'у .
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2014, 19:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента (C++):

Как передать функции массив в качестве аргумента? - C++
Всем привет! Подскажите, как передать функции массив в качестве аргумента? И как сделать, чтобы функция возвращала массив?

Как в качестве аргумента функции передать массив? - C++
Доброго времени суток! Расскажите, пожалуйста, если не затрудняет, как в качестве аргумента функции передать массив? Функция должна...

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

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Как вернуть больше одного значения из функции? - C++
здрасти, как быть если функция должна возвратить не 1 значение а 2?

Передать std::vector в качестве аргумента функции - C++
Задание: определить моду чисел из массива. Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; int mod_a(int, vector&lt;int&gt;); using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
07.08.2014, 19:24 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от root4me Посмотреть сообщение
Кроме bind2nd мне эту архисложную проблему не решить никак ?
std::bind. Если есть лямбды, значит есть и std::bind. С ним гораздо проще обращаться, чем с bind2nd.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2014, 19:24
Привет! Вот еще темы с ответами:

Аргументы командной строки: как программа корректно определяет два пробела в значении аргумента? - C++
Друзья! Есть сторонняя консольная программа, к ней параметром идут имена двух файлов, запускать то есть так: main.exe file_1 file_2 ...

Как можно получить итератор на элемент обрабатываемый в лямбде в функции for_each?STL - C++
Как можно получить итератор на элемент обрабатываемый в лямбде? for_each(arr.begin(), arr.end(), (char n) {if (n == dubl)...

Строку с методом подчеркивает и говорит о том, что не переданы аргументы. Как их передать в метод? - C++
метод таков: void Fraction :: Control(int &amp;denominator, int &amp;numerator) { if (denominator == 0) {cout &lt;&lt; &quot;error!try again!&quot;&lt;&lt;endl;} ...

Как передать функцию в качестве аргумента? - C++
Как передать функцию в функцию, выполняющую усреднение значения через интегрирование. Так как интегрировать придется много, хочу создать...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru