| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > сделать функцию |
| Автор: Mormishka 21.4.2011, 20:02 | ||||
У меня есть функциb
еще есть другая функция
как мне передать в функцию f2 функцию f1, при этом y,z фиксировано ? |
| Автор: bsa 21.4.2011, 20:15 |
| Mormishka, никак. Подобное в С++ решается шаблонами и функторами |
| Автор: boostcoder 21.4.2011, 20:18 | ||
| http://www.boost.org/doc/libs/1_46_1/libs/bind/bind.html Добавлено через 5 минут и 43 секунды тут еще кол-во аргументов не совпадает. или так задумано? Добавлено через 8 минут и 9 секунд стандартное решение при помощи байндеров:
http://liveworkspace.org/code/94182ffea77bad9c8f087f2e80317d3d |
| Автор: null56 21.4.2011, 20:34 | ||
ну если они фиксированы, может как - то так?
|
| Автор: Mormishka 21.4.2011, 21:24 | ||
boostcoder
Да, не совпадает. |
| Автор: mes 21.4.2011, 21:38 | ||
то же, но без шаблона :
|
| Автор: bsa 22.4.2011, 13:56 |
| mes, я и это тоже имел в виду под "шаблоны". На C, а так же если функция f2 принимает только указатель на функцию, то решения нет. |
| Автор: mes 22.4.2011, 14:31 |
| bsa, я привел код не для примера, как решить задачу без шаблонов, а чтоб тс было легче разобраться с биндом |
| Автор: Mormishka 22.4.2011, 19:33 | ||||
| mes, По-моему вы не совсем меня поняли.
Пусть y и z у меня фиксированы. Мне надо передать в f2 функцию от x.
Все правильно? Что такое "_1" ? |
| Автор: bsa 22.4.2011, 19:39 |
| Mormishka, это все доступно только в будущем стандарте С++. Если у тебя f2 определена так, как ты указал, то работать не будет. Я уже сказал, для твоей задачи решения нет, если не прибегать к шаблонным функциям и пр. Если ты менять f2 не собираешься (например, это что-то в сторонней библиотеке), то забудь об этом. |
| Автор: Mormishka 22.4.2011, 19:50 |
| bsa, У меня Visual Assist. Я набираю std:: он мне предлагает bind. У меня что будущий стандарт стоит А вариант с бустом boostcoder, -а ,будет работать ? Проверил, у меня все работает. У меня будущий стандарт! |
| Автор: boostcoder 22.4.2011, 20:35 |
что именно? std::bind() ? поясняйте. а то ощущение такое, что с++ вообще только в будущем стандарте будет работать. и в добавок: стандарт утвердили. ждем печатного издания. обещают к осени. будет работать всегда и везде где работает boost ;) Добавлено через 8 минут и 31 секунду студия 2010? ;) |
| Автор: Mormishka 22.4.2011, 20:54 | ||
| boostcoder, студия 2010 А как объявить шаблон ?
|
| Автор: boostcoder 22.4.2011, 21:12 |
откуда взялось удивление фактом присутствия std::bind() ? ;) обязательно дважды спрашивать/отвечать? мой первый пост смотри ;) |
| Автор: Mormishka 23.4.2011, 06:13 | ||||
| boostcoder, Подключаю
Выдает кучу ошибок. Причем когда включаю в пустой проект работает. С чем он может конфликтовать?
|
| Автор: boostcoder 23.4.2011, 13:00 |
| Mormishka, а ты создаешь с++ проект? или Си? или в студии невозможно создать Си проект. создай с++ проект, и вставь в него код из моего первого поста. |
| Автор: Mormishka 23.4.2011, 13:44 | ||
| boostcoder, Твой пример работает. У меня просто программа сложнее, там много параметров, еще указатель на функцию передается.
|
| Автор: boostcoder 23.4.2011, 14:02 |
| "std::placeholders::" - убери везде. Добавлено через 2 минуты и 22 секунды "std::function" - замени на "boost::function", и подключи "<boost/function.hpp>" Добавлено через 2 минуты и 58 секунд "#include <functional>" - это удали. |
| Автор: Mormishka 23.4.2011, 14:11 | ||
Также куча ошибок.
|
| Автор: Mormishka 23.4.2011, 14:41 | ||||||||
Функция должна принимать указатель на функцию и одну переменную
Простая функция
Функция которая должна принимать указатель на функцию F_line и несколько своих аргументов
Главная функция. Она вызывает функцию solve_one_equat, в качетсве аргумета которой мы должны передать указатель на функцию F_line зависящую только от одной переменной mr, все остальные переменные фиксированы.
|
| Автор: boostcoder 23.4.2011, 14:45 |
| если я тебя правильно понял, то в байнде, у тебя должен создаваться еще один функциональный объект на месте "&F_line". а его не. |
| Автор: Mormishka 23.4.2011, 14:51 | ||||
| Наверное да, &F_line это аргумент функции F_potok. В общем нужно получить функцию Из функции
|
| Автор: boostcoder 23.4.2011, 17:59 |
с чем проблема? байнд ты использовать научился, вроде как. Добавлено через 1 минуту и 22 секунды http://forum.try-catch.ru/index.php?topic=246.0 есть перевод использования байнда, проиллюстрированный в картинках |
| Автор: Mormishka 23.4.2011, 18:55 |
| boostcoder, Я так понял проблема в том что с указателями функций он не работает. |
| Автор: boostcoder 23.4.2011, 19:08 |
ошибаешься. ты неправильно создаешь функциональный объект. твой функциональный объект, аргументом должен брать другой функциональный объект. я об этом уже писал. и ты вроде как на тот момент понял. |
| Автор: Mormishka 24.4.2011, 08:30 |
| boostcoder, А как сделать на функцию-член с учетом boost::function ? |
| Автор: mes 24.4.2011, 09:52 | ||
|
| Автор: Mormishka 24.4.2011, 13:04 | ||
Почему тогда не этот код не работает?
|
| Автор: boostcoder 24.4.2011, 13:12 |
ты принципиально не хочешь читать доку? |
| Автор: bsa 24.4.2011, 22:48 |
А если бы со мной ты согласился, что решения нет, то больше вопросов бы не было Рано ему еще bind. РАНО! |