13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
||||||
1 | ||||||
Использование bind2nd23.06.2014, 00:22. Показов 13985. Ответов 23
Метки нет (Все метки)
Доброй ночи! Помогите, пожалуйста, разобраться с биндерами.
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
|
23.06.2014, 00:22 | |
Ответы с готовыми решениями:
23
Непонятки с bind2nd bind1st и bind2nd Отличие bind2nd от binder2nd Ошибка номер c2535 в адапторе bind2nd |
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|||||||||||
23.06.2014, 00:35 | 2 | ||||||||||
Добавлю (на всякий случай), что во-первых, запись isBuzz() подразумевает, что происходит вызов функции (что тут не нужно), во-вторых, логика std::bind2nd предполагает, что первым аргументом является функциональный объект (с доступным operator () (first_argument_type, second_argument_type)), поэтому необходим wrapper (обёртка) указателя на функцию в функциональный объект (ptr_fun его генерирует).
1
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|||||||||||
23.06.2014, 00:44 [ТС] | 3 | ||||||||||
gray_fox, спасибо за помощь! Файл скомпилировался, но у меня еще возник вопрос: в коде, который приведен ниже, я сделал так:
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
23.06.2014, 00:51 | 4 | |||||
Не понял; если интересует возвращаемый тип std::bind, то это будет некий функциональный объект, конкретный тип которого нет смысла знать (предполагается in place использование), который будет иметь примерно следующий оператор вызова функции:
1
|
andrejap
|
23.06.2014, 00:55
[ТС]
#5
|
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
23.06.2014, 00:58 | 6 | |||||
Т.е. обычно это предполагается использовать так:
Не по теме: Добавлено через 2 минуты
1
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|
23.06.2014, 01:02 [ТС] | 7 |
gray_fox, да - так предполагается. Но мой вопрос относительно возвращаемого типа адаптора связан с тем, что как-то не хочу применять повсеместно auto, пока не буду знать точно, что выводится там автоматически. Спросил, чтобы разобраться что же там, если не bool.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 01:22 | 8 |
Там смысл в том, что ты будешь знать какими свойствами обладает адаптор (callable, сколько и каким образом передаются аргументы), но какой конкретный тип будет иметь этот адаптор тебе знать не надо; на разных компиляторах даю оценку 146% он будет совершенно разный. Если интересна реализация, то смотри исходники STL либо boost::bind (сразу скажу, вся эта "магия" относительно проста но здесь синтаксис С++ и правила оформления кода не для слабонервных.
Добавлено через 8 минут + учитывая сказанное, если ты собираешься сохранить результат std::bind, то обязательно используй auto в качестве спецификатора типа, т.к. возвращаемый тип не специфицирован стандартом языка. Добавлено через 4 минуты Там должен быть (если не запамятовал) не bool, а callable (вызываемая "сущность"), которая имеет тип возвращаемого значения, неявно приводимого к bool.
1
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
||||||
23.06.2014, 01:30 [ТС] | 9 | |||||
Если бы знать, где тут они:
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 01:46 | 10 |
Найди, где у тебя находится <functional> (find <your_g++_include_dir> -name functional) и проследи цепочку include-ов.
Добавлено через 5 минут Например у меня (Винда + MinGW_4.8.0) определение std::bind находится в <functional>.
1
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|
23.06.2014, 01:53 [ТС] | 11 |
gray_fox, ну эт я напамять помню: /usr/include/c++/functional .Днем посмотрю уже с компа, а то пишу со смарта.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 01:57 | 12 |
Не по теме: Если что, MinGW - это "минимальный" порт для разработчика, который включает gcc/g++ порт под Windows. Добавлено через 2 минуты Смотри его, наверняка все определения в этом заголовочном файле; если нет, то смотри цепочки include-ов, они обычно имеют вполне понятные имена.
1
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|
23.06.2014, 01:58 [ТС] | 13 |
gray_fox, mingw - это для cygwin или можно его и в разных ide использовать?
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 02:07 | 14 |
andrejap, можно в разных IDE, MinGW - это минимальный порт (Cygwin его использует). Например, я использую на Винде NetBeans + MinGW_8.0 для личных проектов, Cygwin иметь для этого не обязательно, MinGW в базовой конфигурации даст тебе возможность использовать большинство языков, поддерживаемых GCC.
0
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|
23.06.2014, 02:12 [ТС] | 15 |
gray_fox, использовать где? Не в NetBeans же? Я почему спрашиваю - саю использую netbeans; туда же (в netbeans) gccgo не подключишь? Или на windows такое прокатывает с netbeans+mingw?
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 02:18 | 16 |
andrejap, если ты под Linux используешь NetBeans, наверняка ты используешь g++ (либо clang++), MinGW - это порт gcc (и, соответственно, g++) под Win.
0
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|
23.06.2014, 02:25 [ТС] | 17 |
gray_fox, да, выбираю либо то, либо то. Просто из-за информативности вывода, на силенге он еще и цветной в терминале.
Спасибо большое за инфу! Узнал много новой информации! Доброй ночи!
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
23.06.2014, 02:30 | 18 |
Да, clang пока рулит в плане информативности + у них есть своя виртуальная машина, которая может пригодиться для разработки своих нативных\JIT языков; см. http://llvm.org/.
0
|
Jupiter
|
23.06.2014, 02:31
#19
|
0
|
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
|
|||||||||||
23.06.2014, 23:31 [ТС] | 20 | ||||||||||
gray_fox, ага, вижу - в самом хедере определение есть:
Интересно еще - что значит вторая строчка:
0
|
23.06.2014, 23:31 | |
23.06.2014, 23:31 | |
Помогаю со студенческими работами здесь
20
Забиндить второй аргумент функции, используя std::bind2nd Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. Создание и использование своих @NamedQueries. Использование EntityManager Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr Использование строк.Использование структур Использование функций, использование break Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |