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

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

Войти
Регистрация
Восстановить пароль
 
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Использование bind2nd - C++

23.06.2014, 00:22. Просмотров 1153. Ответов 23
Метки нет (Все метки)

Доброй ночи! Помогите, пожалуйста, разобраться с биндерами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <algorithm>
#include <iterator>
#include <functional>
#include <vector>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
typedef const int first_argument_type;
typedef const int second_argument_type;
typedef bool result_type;
 
result_type isBuzz(first_argument_type v, second_argument_type d);
 
int main() {
    srand(time(0));
    vector<int> vi(15);
    for (auto& x : vi) x = rand() % 100;
 
    //putting out unchanged values
    for (const auto& x : vi) cout << x << endl;
 
    //setting adapter
    const int d = 5;
    for_each(vi.cbegin(), vi.cend(), bind2nd(isBuzz(), d));
 
    //putting out changed values
    cout.fill ('_');
    for (const auto& x : vi) {
        cout.width(5);
        cout << x << endl;
    }
    return 0;
}
 
result_type isBuzz(first_argument_type v, second_argument_type d) {
    if (v%d == 0)
        return true;
    else
        return false;
}
Хотелось бы понять как правильно "тайпдефить" адаптируемую функцию?.. И поясните ошибку, плз:
clang++ -std=c++11 -O2 16_0.cxx
16_0.cxx:27:43: error: no matching function for call to 'isBuzz'
for_each(vi.cbegin(), vi.cend(), bind2nd(isBuzz(), d));
^~~~~~
16_0.cxx:15:13: note: candidate function not viable: requires 2 arguments, but 0 were provided
result_type isBuzz(first_argument_type v, second_argument_type d);
^
1 error generated.


Добавлено через 5 минут
А, итераторы уже сообразил - нужно begin() и end()! Но это все-равно сути не решает.
upd2. Уф, и первый аргумент должен быть не-const. Исправил.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 00:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование bind2nd (C++):

Непонятки с bind2nd - C++
Привет. Вот к примеру есть такой код: #include &lt;algorithm&gt; #include &lt;functional&gt; #include &lt;iostream&gt; #include &lt;array&gt; ...

bind1st и bind2nd - C++
Проблемы с std::bind1st и std::bind2nd Пишу такой код: void foo(int &amp;t, int &amp;t) { } int main() { int a; ...

Отличие bind2nd от binder2nd - C++
Привет. Чем отличается bind2nd (1st) от binder2nd (1st)? Первый - функция, а второй - функтор? Спасибо.

Ошибка номер c2535 в адапторе bind2nd - C++
Доброго времени суток начал изучать STL и пытаюсь соответственно активно использовать в нижеприведенной программе компилятор выдал ошибку...

Забиндить второй аргумент функции, используя std::bind2nd - C++
Как забиндить свою функцию с двумя аргументами в функцию с одним аргументом? Вот пример в котором нужно сделать для b: #include...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. - C++
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
23.06.2014, 02:18 #16
andrejap, если ты под Linux используешь NetBeans, наверняка ты используешь g++ (либо clang++), MinGW - это порт gcc (и, соответственно, g++) под Win.
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
23.06.2014, 02:25  [ТС] #17
gray_fox, да, выбираю либо то, либо то. Просто из-за информативности вывода, на силенге он еще и цветной в терминале.

Спасибо большое за инфу! Узнал много новой информации! Доброй ночи!
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
23.06.2014, 02:30 #18
Цитата Сообщение от andrejap Посмотреть сообщение
Просто из-за информативности вывода, на силенге он еще и цветной в терминале.
Да, clang пока рулит в плане информативности + у них есть своя виртуальная машина, которая может пригодиться для разработки своих нативных\JIT языков; см. http://llvm.org/.
0
Jupiter
23.06.2014, 02:31
  #19

Не по теме:

Цитата Сообщение от andrejap Посмотреть сообщение
C++
1
2
3
4
if (v%d == 0)
* * * * return true;
* * else
* * * * return false;
C++
1
return v % d == 0;

0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
23.06.2014, 23:31  [ТС] #20
gray_fox, ага, вижу - в самом хедере определение есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  /**
   *  @brief Function template for std::bind.
   *  @ingroup binders
   */
  template<typename _Func, typename... _BoundArgs>
    inline typename
    _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
    bind(_Func&& __f, _BoundArgs&&... __args)
    {
      typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
      typedef typename __helper_type::__maybe_type __maybe_type;
      typedef typename __helper_type::type __result_type;
      return __result_type(__maybe_type::__do_wrap(std::forward<_Func>(__f)),
               std::forward<_BoundArgs>(__args)...);
    }
Возвращает какой-то __helper_type::type.
Интересно еще - что значит вторая строчка:
C++
1
inline typename
?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
23.06.2014, 23:39 #21
andrejap, inline это inline) typename смотри в контексте
C++
1
typename _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
type зависит от параметров шаблона (зависимый тип), поэтому необходимо указывать typename (что бы компилятор знал, что это именно тип, а не ещё что-то). Вот тут в ответе есть неплохое объяснение.
1
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
23.06.2014, 23:41  [ТС] #22
Цитата Сообщение от gray_fox Посмотреть сообщение
gray_fox, да, этот llvm часто встречаю в новостях, а что оно такое - до конца не могу понять. Можно чуточку по-подробнее? Тут в случае c++ clang++ транслирует исходный код в некий байткод, а затем llvm переводит его в машинный?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
23.06.2014, 23:49 #23
Цитата Сообщение от andrejap Посмотреть сообщение
gray_fox, да, этот llvm часто встречаю в новостях, а что оно такое - до конца не могу понять.
Ну это библиотека для разработки языков, по крайней мере в своей основе. Что-то большее об этом рассказать не могу, не в курсе.

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
inline это inline)
Вообще inline там избыточен, т.к. шаблоны функций неявно inline.
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
24.06.2014, 00:02  [ТС] #24
gray_fox, кое-что почерпнул, хотя, не все там (по ссылке) ясно. Но главное учить дальше! Благодарю за добродетель!
Jupiter, thanks too!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 00:02
Привет! Вот еще темы с ответами:

C/C++ Использование функций, использование break - C++
Здравствуйте. Не знал как назвать тему, боялся что, если назову &quot;КАК ЭТО РАБОТАЕТ?&quot; то её удалят. Пишу программу для вычисления длинных...

Использование строк.Использование структур - C++
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным количеством символов. И еще одна: ...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Создание и использование своих @NamedQueries. Использование EntityManager - Java EE
Добрый день! Создавал классы сущностей и сессий через NetBeans генераторы кода. Использование стандартных...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.06.2014, 00:02
Ответ Создать тему
Опции темы

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