![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем привет.
код:
http://liveworkspace.org/code/ec58c0ac901a...0cfb731946a6372 в общем, идея в том, чтоб первым аргументом в boost::bind() подставлять методы которые хранятся в mpl последовательности. но что-то компилятор не позволяет в mpl последовательность пихать имена методов. и, я подозреваю, что он прав. к примеру, если этот код изменить так, то все ок.
http://liveworkspace.org/code/9bc14fc4f533...abbca9544b68b8c спасибо. Это сообщение отредактировал(а) boostcoder - 19.1.2011, 17:27 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
где ж это имя ? это адрес.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну да, хранится адрес, а записываю имя Вы поняли что я имел ввиду как такое можно проделать? Добавлено через 2 минуты и 22 секунды идея! ща.. Добавлено через 13 минут и 39 секунд нет. не правильная идея :( есть какие-то варианты? |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
но Вы меня по-мойму нет список типов, а пытаетесь сохранить в нем значение Добавлено @ 23:08 добавить wrapper mpl::int_ ? насколько я знаю, не пойдет ибо адрес метода не конвертится в инт.. сейчас посмотрю, что пытаетесь этим сделать.. Добавлено через 6 минут и 38 секунд
a плейсхолдеры кто в таком случае подставлять будет? Это сообщение отредактировал(а) mes - 12.1.2011, 23:12 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если строго, то нет.. не его тип Это сообщение отредактировал(а) mes - 12.1.2011, 23:19 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тогда нужно привести адрес к целочисленному типу.. а это не позволительно.. теоретически нужен wrapper для преобразования адреса в тип, наподобие вышеупомянутого mpl::int_ Добавлено через 4 минуты и 34 секунды если "его" - это адрес, то правильно.. я почему то подумал, что речь о методе.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вроде понял. попробую реализовать.
спасибо зы тему пока не закрываю. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, здравствуйте.
скажите, я правильно понимаю, что адрес метода(или его смещение) известно в компайл-тайм? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
осталось выяснить совсем чуток: как, и с какими Это сообщение отредактировал(а) boostcoder - 13.1.2011, 16:18 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
из того, что я знаю:
значение адреса функции не является const_expr адрес можно использовать как шаблон параметра.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
подниму тему.
и немного перефразирую: как из адреса метода можно извлечь тип - указатель на метод? нужно для этого:
http://liveworkspace.org/code/c38a753fbe63...2be749fded033d7 или "как параметр шаблона" ? в любом случае, это возможно, если имеется тип-указатель на метод. вопрос именно в том, как определить сигнатуру из адреса? получить из сигнатуры тип - не проблема. спасибо. Добавлено через 4 минуты и 32 секунды красивого способа наверняка нет. придется лепить метакод + mpl::if_ |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
по идее, параметр "Method" шаблона "method", должен быть шаблонном создающим тип.
как-то так:
на этом мои мысли заканчиваются.. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не пойму чего Вы хотите с этим сделать... вот немного: http://liveworkspace.org/code/0f76d30d4c20...76b61098e42bd19 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
хочу одним выстрелом убить двух зайцев. первый - по адресу метода определить сигнатуру, сами знаете для чего ;) второй - сохранить переданный адрес. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, в данный момент, я пытаюсь избавить юзера от деклараций импульсов.
сейчас, регистрация такая:
хочу такую:
т.е. чтоб юзер не заботился о вписывании сигнатуры. согласен что это не жизненно необходимо.. но все же. Это сообщение отредактировал(а) boostcoder - 19.1.2011, 22:33 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
т.е. Вам нужна шаблонная функция принимающая одним из параметров метод ? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я и не знал что так можно я полагал, что если уж использовать адрес метода в качестве параметра шаблона, то должна быть известна сигнатура... эх.. спасибо Вам огромное вопрос закрыт. Это сообщение отредактировал(а) boostcoder - 19.1.2011, 23:25 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, а как такой прием вообще называется? где о нем можно почитать?
я сейчас полистал свои книжки, и сходу ничего подобного не нашел. в принципе это не новость для меня, т.к. если бы об этом писали в книжках, то я наверняка запомнил бы. Добавлено через 2 минуты и 44 секунды в принципе с помощью этого трюка, получилось привести регистрацию к такому виду:
что меня сильно радует |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как называется не знаю..a почитать, наверно, только в бусте еще было б хорошо &t не регистрировать в каждом методе.. Это сообщение отредактировал(а) mes - 20.1.2011, 15:25 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
с одной стороны идея хорошая, связывать при регистрации id и тип.. но с другой стороны лишаемся отсутствия статического контроля.. |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
сделал так:
лучше придумать не удается..
да. это так. есть предложения? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот что набросалось :
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
на этой основе пришла в голову абстракция импульс -> волна -> канал..
надо будет подумать.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
получается, что все же невозможно в mpl тип сохранить адрес метода... жаль :(
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
почему нельзя ? нельзя делать в компиль-тайме операции связанные непосредственно со значением адреса.. можно, например, разгрузить через тип, к которому впоследствии можно применить операцию вызова, и этот тип запихивать в мпл вектор.. http://liveworkspace.org/code/c8f262908709...d63ed974fb8e675 но только стоит ли овчинка выделки ? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |