![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Есть некоторый класс. В одном из его методов он должен принимать функцию, в другом вызывать ее.
1) Функция. Она всегда имеет параметры определенного типа. Допустим структуру st. Один из методов моего класса получает эту функцию(как?) и запоминает в свойство(с каким типом?), а другой метод вызывает ее(как?) с параметром в виде структуры. 2) То же самое, но с методом объекта, а не с функцией. Класс объекта заранее не известен. Это сообщение отредактировал(а) nerezus - 30.4.2007, 18:52 |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
тебе это надо?? |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
для метода:
совет тебе добрый: многим лучше использовать обощённые функторы... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
-------------------- Подпись больше не нужна |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
А учитывая
то другого приемлимого выхода собственно и не остаётся. Это сообщение отредактировал(а) Mayk - 30.4.2007, 19:18 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
nerezus |
|
||||||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Спасибо, заработало:
А про методы ничего нету? )
Добавлено через 2 минуты и 55 секунд оо, сколько ответов.
Добавлено через 6 минут и 11 секунд
|
||||||||
|
|||||||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
boost::bind, boost::lambda, Loki::Function...
а вообще читай Александрску, Современное проектирование на С++ ![]() функторы ![]() в двух словах - это объекты у которых перегружен operator () -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
хм, тогда остается 2 варианта:
1) наследование нужного класса, из которого я хотел делать вызовы. Но тут проблемы, ибо он у меня Singleton 2) Strategy паттерн, но как-то хреново я его тут представляю.... |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
3) использовать функторы
![]() скажи, а в чём проблема их использовать? ![]() компилировать boost для них не нужно, если не ошибаюсь... пример...вот те простейший пример:
Добавлено через 3 минуты и 2 секунды кстати, для map ты видишь как производится доступ к членам (полям/методам)... функтор возвращённый boost::bind можно засунуть, скажем, в boost::function (или Loki::Function) и вызывать не зная ни класса, ни метода... ничего... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
про возможности boost::bind
про возможности boost::lambda (не встречавшим конструкций if_then/try_catch и т.п. рекомендую - сильно впечатляет в первый раз ![]() про возможности boost::function nerezus, конкретно твоя задача решается примерно так:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Блин, как-то некрасиво получается =\
Я вот думаю, может стоит попытаться заюзать готовый фреймворк? Просто ща я пытался структурный код SDL переделать в ООП(при практически нулевых знаниях С++) и столкнулся с сабжем. Добавлено через 1 минуту и 2 секунды archimed7592, за код спасибо. А можешь выложить либы буста для этого примера? |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
nerezus, ты просто не почувствовал красоты в понятии плюсов ![]() На мой взгляд, буст (и особенно бустовское ФП) - это самое красивое в плюсах ![]() |
|||
|
||||
nerezus |
|
||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
|
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Любитель, всецело и полностью согласен
![]() ![]() nerezus,
![]() если нужен сам буст, то на boost.org тебе дорога... Добавлено через 2 минуты и 26 секунд нет, map к функциональному программированию отношения не имеет ![]() скажи для начала в каких языках есть такие же мощные средства для ФП ![]() ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Всё-таки позволю не согласиться... Прикол плюсов в достаточно виртуозной реализации многих вещей (не только ФП) без явной поддержки этого со стороны языка. Это красиво. В определённом роде. Добавлено через 1 минуту и 34 секунды Питон - это хороши, интересно... Но красоты я лично не вижу. Не привлекает. А програмерить на плюсах - приятно, блин! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |