![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Всё гораздо проще - заснул Вариант устроил (даже плюсанул). Спасибо. Правильно ли я понимаю, что invoke bind'ит по-очереди параметры к указанной ф-ции ? P.S. Жаль, что для такой простой (на мой неквалифицированный взгляд) задачи, как сохранение параметров var.template, нужна такая орава непростых классов (boost::mpl::push_front, boost::mpl::vector, boost::fusion::result_of::as_vector, boost::fusion::invoke). Плюс два квалифицированных программиста (mes + boostcoder). Ну... это так. Мысли вслух. На самом деле ещё раз спасибо. Закрываю. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
честно? - даже не разбирался) фьюжн очень тяжело читается
эти нужны только по тому, что компилятор пока не умеет разворачивать вариадик в список параметров. но это пока. а в будущем, можно будет использовать std::tuple<...> и boost.fusion::invoke. |
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
для этой задачи достаточно стандартного tuple
в принципе нужен только аналог boost::fusion::invoke для tuple, тогда все это не нужно.. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
хотя, не знаю как это правильно объяснить... может mes подскажет. Добавлено через 6 минут и 20 секунд кстати, на гитхабе как-то встречал форк реализации то-ли boost.mpl то-ли boost.fusion с поддержкой вариадиков. но что-то особо не вдумывался для чего это. а наверное для того чтоб обходится без приведенных мною адаптеров.. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Хммм. А у этой конструкции есть ограничения...
Например, нельзя "сопрячь" констовую ссылку и объект:
http://liveworkspace.org/code/4be6766d51d7...83c0b2b98c265c9 ругается
если же сделать foo( int x, int y, std::string str ) - работает... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
потому что аргументы от передаваемых и тобой до подставляемых в функцию, биндятся через посредника. а он создается из типов которые подставляешь ты в вызов. т.е. он не знает типов забиндинной функции. Добавлено через 14 минут и 39 секунд ааа, нет! сигнатура метода при вызове delegate() выводится из сигнатуры указываемого метода. а подставляемые аргументы не совпадают. Добавлено через 14 минут и 58 секунд но посредник там все равно есть Это сообщение отредактировал(а) boostcoder - 5.12.2011, 10:35 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
у меня пока не было времени обдумать и ответить .. Добавлено через 6 минут и 57 секунд
ну как граммотно это сказать тоже не знаю.. проблема стоит в конвертации списка аргументов переменного размера в список фиксированного размера.. Добавлено через 8 минут и 9 секунд под проблемой подразумевается создание fusion-контейнера непосредственно из вариадика.. Добавлено через 10 минут и 7 секунд std::bind хранит аргументы в tuple, и имеет средства его инвокинга, но это находится в _приватной_части_ и "недоступно" пользователю.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, кстати, вариадик разворачивается в std::tuple<>
я думал что это не проблема fusion/mpl а проблема компилятора..
http://liveworkspace.org/code/e36900262a55...c1cc5fd45ccf8bf Добавлено через 2 минуты и 26 секунд mes, вчера же Вы дали ссылку на блог. я прочел, но так и не отметил тот факт что вариадики и кортежи дружат. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ммм.. позвольте уточнить Вы были не в курсе, что можно из аргументов вариадика построить std::tuple ? |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да. точнее сказать, я полагал что при использовании std::tuple компилятор будет так же говорить что что-то там не реализовано.
а разве это не тот случай?
http://liveworkspace.org/code/0994d2d997f7...495d11a7c3b2a3f |
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тот случай здесь :
Добавлено через 5 минут и 13 секунд
удивительно.. ведь в той нашей многообсуждаемой теме это проскальзовало не раз.. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
там ведь мы fusion::vector использовали. нет? оО Добавлено через 12 минут и 59 секунд ну да. и в fusion::invoke() передавали. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не только, в тех примерах где были использованы вариадики, там был тьюпл.. кстати по теме , там был и пример инвокинга этого тьюпла (это если borisbn интересно, мне искать лень, слишком уж страниц много)) ) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
этот apply и apply_inner - простые функции, а не методы класса. Я попробовал переделать http://liveworkspace.org/code/e7d6dd7ce1e3...c56abd587e04533 но запутался -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |