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

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

Войти
Регистрация
Восстановить пароль
 
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
#1

Непонятки с bind2nd - C++

26.08.2013, 17:13. Просмотров 566. Ответов 2
Метки нет (Все метки)

Привет. Вот к примеру есть такой код:
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
#include <algorithm>  
#include <functional>   
#include <iostream>       
#include <array>       
  
class multip : public std::binary_function<int, int, void>
{
public:
    void operator()(int val, int to) const {
        std::cout << (val *= to) << std::endl;
    }
 
};
 
int main () 
{
    std::array<int, 5> a = { 1, 2, 3, 4, 5 };
 
    std::for_each(a.begin(), a.end(), std::bind2nd(multip(), 2));
 
    //std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, " "));
    
    system("PAUSE");
    return 0;
}
почему, если убрать const в операторе(), код не будет работать?
И еще, должен быть объязательно функтор? Обычную функцию с bind2nd, использовать нельзя?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2013, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятки с bind2nd (C++):

Использование bind2nd - C++
Доброй ночи! Помогите, пожалуйста, разобраться с биндерами. #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include...

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...

непонятки с for - C++
Издавна мучает вопрос почему некоторые используют в цикле for ( int i = n; i &lt; m ; i++), а другая часть населения for ( int i = n; i &lt; m ;...

2
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
26.08.2013, 17:38 #2
Цитата Сообщение от SERUYBKR Посмотреть сообщение
почему, если убрать const в операторе(), код не будет работать?
Потому что функция bind2nd первым параметром принимает константную ссылку.
C++
1
2
template <class Operation, class T>
  binder2nd<Operation> bind2nd (const Operation& op, const T& x);
Соответственно, вызов неконстантной функции повлечет за собой discard qualifier.

Цитата Сообщение от SERUYBKR Посмотреть сообщение
И еще, должен быть объязательно функтор? Обычную функцию с bind2nd, использовать нельзя?
Можно, надо только обернуть функцию в функтор. Например, с помощью функции
C++
1
2
3
4
5
template <class Arg, class Result>
  pointer_to_unary_function<Arg,Result> ptr_fun (Result (*f)(Arg));
 
template <class Arg1, class Arg2, class Result>
  pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*f)(Arg1,Arg2));
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void some(int val, int to) {
  std::cout << (val *= to) << std::endl;
}
 
 
int main () 
{
    int a[] = { 1, 2, 3, 4, 5 };
 
    std::for_each(a, a + 5, std::bind2nd(std::ptr_fun(some), 2));
 
    //std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, " "));
    
    //system("PAUSE");
    return 0;
}
1
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.08.2013, 17:59 #3
SERUYBKR, желательно вместо std::bind2nd использовать std::bind, т.к. std::bind2nd является устаревшим методом
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 17:59
Привет! Вот еще темы с ответами:

непонятки - C++
у меня есть прога которая берет дабл и разделяет его на две сост. целое и дробное this-&gt;z = int(d); this-&gt;p = ( d - int(d)...

Непонятки с выводом - C++
Задание гласит: Вычислить приближенное значение конечной суммы с точностью e:0.0005 ...

Непонятки с указателями - C++
#include &lt;iostream&gt; using namespace std; int is_order(const int* array) { for(const int* z = array; z &lt; array +...

непонятки с матрицой - C++
Найти сумму модулей элементов, расположенных выше главной диагонали у меня проблемы ваще всегда с этими блин матрицами , корчое...


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

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

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