![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Abyx |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
сабж.
Надо получить типы аргументов из любого Callable, в том числе лямбда-функций С++0х. boost.function_traits с ними не работает. ------------
выдает Callable=`anonymous-namespace'::<lambda0> использовать преобразование в function не хочется, т.к. надо 2 раза писать сигнатуру
Это сообщение отредактировал(а) Abyx - 22.7.2010, 19:33 |
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
почитал стандарт. лямбда-выражение должно выдавать функтор.
удалось вытащить operator()
T=int (__thiscall `anonymous-namespace'::<lambda0>::* )(int) const |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
непонятно только что написать чтобы заставить работать boost.function_traits или аналог
Это сообщение отредактировал(а) Abyx - 22.7.2010, 15:21 |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
вобщем надо что-то вроде этого
|
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не пойму, что ты хочешь получить... что нужно? опиши детально. |
||||||
|
|||||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
boostcoder, мне надо получить типы аргументов из любого Callable
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не сигнатуру функции/метода? не очень понимаю задачу целиком... |
|||
|
||||
| Abyx |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
задача целиком
применение
|
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
этот код у вас работает?
тут:
в лямбда выражении, вы используете handler() по значению. но его не captured(не знаю как на русском сказать), квадратные скобки пусты. Добавлено через 40 секунд эм... теги в коде не работают Добавлено через 10 минут и 11 секунд да у вас в коде полно ошибок. откуда код взят? на каком компиляторе проверяли? Добавлено через 13 минут и 8 секунд в трех из четырех лямбда выражениях, вы выполняете capture по значению...зачем? они у вас и так, в аргументы методов передаются по значению. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
собственно ответ тут: http://www.boost.org/doc/libs/1_43_0/libs/...troduction.html
|
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
boostcoder, в том коде ошибок нет.
[] - это захват по умолчанию, по значению. handler хватается по значению, т.к. он может быть локальной переменной вызывающей функции. const char* nameN нет смысла передавать по ссылке
действительно, там нет функторов о_О странно %) всегда думал что они поддерживаются |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
boostcoder, действительно там ошибка, должно быть [=]
а как еще его передавать в лямбду? если передавать по ссылке, то после выхода из operator() эти ссылки будут указывать вникуда Это сообщение отредактировал(а) Abyx - 22.7.2010, 23:25 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну как так? ламбда выражение живет меньше чем блок кода тела метода. потому, ссылки будут актуальны все время жизни лямбда выражения. Добавлено @ 23:36 а typename ваш компилятор не требует в подобных выражениях?
Это сообщение отредактировал(а) boostcoder - 22.7.2010, 23:46 |
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
вообще-то оно записывается в handlers_ не требует, а зачем оно там? (компилятор - msvc. gcc требует, ну и фиг с ним) Это сообщение отредактировал(а) Abyx - 22.7.2010, 23:57 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |