![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
надо написать код, который
1) принимает Callable параметр 2) парсит его тип, определяя типы аргументов и возвращаемого значения 3) сохраняет его 4) вызывает его, передавая ему параметры нужных типов примерный код для указателей на функции такой
в общем-то с указателями на функции все понятно, но хотелось бы как минимум еще обрабатывать результат bind(&Cls::Met, obj, _1, _2) для этого можно использовать следующий код, подходящий для обоих случаев
однако хотелось бы рассмотреть и другие варианты |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
bsa, мне из этого Callable надо выдрать типы параметров,
чтобы сгенерить код, который эти параметры получит и преобразует к нужному типу т.е. например на входе будет vector<string> с параметрами и надо каждый параметр преобразовать к нужному типу перед вызовом коллбека
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
хм... может действительно что-то выйдет с
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
ап.
я правильно понимаю, что boost.function_types работает только со встроенными Callable типами, и не работает с функторами? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
такой код не работает
с ошибкой не удалось вывести аргумент шаблон для "boost::function<Signature>" из "void (__cdecl *)(void)" |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Какой компилятор? |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
не работает. алсо тут нет функторов: http://www.boost.org/doc/libs/1_41_0/libs/...sification.html |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
вообще я сомневаюсь что оно в принципе может работать вот такое - работает, но это конечно не то что надо
|
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Используй "перегрузку".
В С++, кроме указателей, есть ссылки на функции. Это сообщение отредактировал(а) Леопольд - 31.12.2009, 11:04 -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд,
а функторы-то как? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если правильно понял вопрос, то функторы привязываются к boost::function bind`ом. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
mes, это слишком неудобно, алсо бинд там не нужен
говоря "функторы" я имею ввиду в основном как раз результаты бинда Добавлено через 4 минуты и 4 секунды вопрос решен. надо проверять является ли аргумент классом, и если да- брать указатель на operator() и анализировать его |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |