Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
xSCJx
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
#1

Непонятки с bind2nd

26.08.2013, 17:13. Просмотров 595. Ответов 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
Ответы с готовыми решениями:

bind1st и bind2nd
Проблемы с std::bind1st и std::bind2nd Пишу такой код: void foo(int &amp;t, int...

Использование bind2nd
Доброй ночи! Помогите, пожалуйста, разобраться с биндерами. #include...

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

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

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

2
lemegeton
2933 / 1362 / 467
Регистрация: 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.
567 / 550 / 47
Регистрация: 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

непонятки
у меня есть прога которая берет дабл и разделяет его на две сост. целое и...

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

непонятки с Си
вобщем вот что задали Вот что я зделал при выполнении пишет s=none(или...


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

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

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