Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаленный вызов. детали, реализация, архитектура, у темы новое название! 
:(
    Опции темы
mes
Дата 20.12.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



вот набросок инвокинга метода : http://liveworkspace.org/code/995850590218...1de39a52ae2533c




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 20.12.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



сейчас залью.
PM WWW   Вверх
mes
Дата 20.12.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  20.12.2010,  20:02 Найти цитируемый пост)
сейчас залью. 

что и куда ? позвольте узнать ..



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 20.12.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  20.12.2010,  21:40 Найти цитируемый пост)
что и куда ?

discoly. на SVN. что не так?

PM WWW   Вверх
boostcoder
Дата 20.12.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  19.12.2010,  19:49 Найти цитируемый пост)
для таблицы на основе импульс::аргс_..   получить указатель на метод и поставить вместо этого :
  mpl::list<void, T*, int, int> >  // !! todo : synthesis from Im::args.._t

тут с add_const_ref 


Цитата(mes @  19.12.2010,  20:18 Найти цитируемый пост)
конст_референсите сначала последовательность аргумента, потом пуш_фронтите T* и за ним void..
и скармливаете это мембер_функтион_поинтеру...

что-то не понимаю..правда smile 
PM WWW   Вверх
mes
Дата 20.12.2010, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  20.12.2010,  21:01 Найти цитируемый пост)
Цитата
конст_референсите сначала последовательность аргумента, потом пуш_фронтите T* и за ним void..
и скармливаете это мембер_функтион_поинтеру...
что-то не понимаю..правда


Код

typedef
 function_types::member_function_pointer<
  fusion::push_front <
   fusion::push_front < seq_add_const_ref<Im::args_mpl_seq_t
                                         >::type ,  T*
                      >::type, void
                     >::type>::type member_invoker_t;

что то типо этого smile

Добавлено через 11 минут и 49 секунд
Цитата(boostcoder @  20.12.2010,  20:43 Найти цитируемый пост)
discoly. на SVN. что не так?

я забыл про "снятели/добавители константности", поэтому был слегка удивлен,что Вы туда залить хотите..

Добавлено через 13 минут и 17 секунд
проапдатился, теперь не могу читать исходники..из за различий в переносе строки smile
придется искать подходящий редактор, чтоб туда-сюда не конвертить




Это сообщение отредактировал(а) mes - 20.12.2010, 22:21


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 21.12.2010, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  20.12.2010,  22:20 Найти цитируемый пост)
придется искать подходящий редактор, чтоб туда-сюда не конвертить

notepad++
PM WWW   Вверх
mes
Дата 21.12.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  20.12.2010,  23:16 Найти цитируемый пост)
notepad++ 

спс.. поставил.. довольно приятный редактор.. smile




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 21.12.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  20.12.2010,  22:20 Найти цитируемый пост)
typedef
 function_types::member_function_pointer<
  fusion::push_front <
   fusion::push_front < seq_add_const_ref<Im::args_mpl_seq_t
                                         >::type ,  T*
                      >::type, void
                     >::type>::type member_invoker_t;

это куда вставить? у импульса нет параметра T

не вижу где оно должно быть
PM WWW   Вверх
mes
Дата 21.12.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  21.12.2010,  13:10 Найти цитируемый пост)
это куда вставить? у импульса нет параметра T


Цитата(boostcoder @  20.12.2010,  21:01 Найти цитируемый пост)
для таблицы на основе импульс::аргс_.. 

 smile

Добавлено @ 16:28
для подсказки :
условно:
Код

struct impulse { int a,  int b };

struct table // for Class
{
   struct at_impulse {
    void (Class::*fn) (int const& a, const& b);
   };
};





Это сообщение отредактировал(а) mes - 21.12.2010, 16:30


--------------------
PM MAIL WWW   Вверх
mes
Дата 21.12.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



я так понимаю Вы схему не до конца понимаете.. 

есть класс у него есть таблица методов.. адресом ячейки является тип импульса,
тип содержимого определяется типами набора аргументов импульса, а содержимое (адрес метода) пользователем..
тогда имея таблицу,  и указатель на объект, для любого типа импульса мы можем вызвать метод обработчик.. 

Вышеприведенный кусок кода нужен для того. чтоб определить сигнатуру метода обработчика, на основе типов класса и импульса.. ограничение выражено тем, что каждый параметр метода-обработчика, должен иметь тип const&.

Добавлено через 1 минуту и 43 секунды
я полагаю Вас еще путает диспатчеризация в рантайме.. 
на этом этапе все связано на этапе компиляции.. 
зависимость от рантайма за этой областью.. 




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 22.12.2010, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  21.12.2010,  16:38 Найти цитируемый пост)
я так понимаю Вы схему не до конца понимаете..

схему? схему того как Вы это представляете? - нет.
реализация на данный момент понятна как никогда.

просто посудите сами. Вы, не будучи телепатом, и не зная моих мыслей, что бы поняли из этого?:
Цитата

для таблицы на основе импульс::аргс_..   получить указатель на метод и поставить вместо этого :
  mpl::list<void, T*, int, int> >  // !! todo : synthesis from Im::args.._t

тут с add_const_ref 

конст_референсите сначала последовательность аргумента, потом пуш_фронтите T* и за ним void..
и скармливаете это мембер_функтион_поинтеру...

т.е. сама задача понятна. не понятно где Вы предполагаете это должно быть реализовано? в реализации пользователя? в строке примера приведенного Вами? в самой дисколи?
т.е. я, помимо того чтоб думать о задаче, должен проанализировать все ваши комментарии, учесть все что говорилось об этом раньше(если говорилось), и реализовать задачу имея в распоряжении только собственные предположения.

представили? вакуум ощущаете? а я его ощущаю на протяжении всей темы. о чем Вам говорил не раз. именно по этому, большую часть темы я нахожусь в подвешенном состоянии, что меня естественно не радует smile 
это не придирки, скорее, просьба осознать то, что то, что очевидно для Вас, совсем не обязано быть очевидно для меня smile 

что дальше делаем? дайте мне чего-то накодить.

Это сообщение отредактировал(а) boostcoder - 22.12.2010, 08:50
PM WWW   Вверх
mes
Дата 22.12.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  22.12.2010,  07:43 Найти цитируемый пост)
просто посудите сами. Вы, не будучи телепатом, и не зная моих мыслей, что бы поняли из этого?:

ну насчет мыслей.. как какая приходит я сразу отписываюсь в теме, другое дело, что может не очень ясно - но для этого есть уточняющие вопросы, которых кстати на удивление очень мало, что создает некоторые сомнения.. 

ну вот эта строчка :
Цитата(boostcoder @  22.12.2010,  07:43 Найти цитируемый пост)
  mpl::list<void, T*, int, int> >  // !! todo : synthesis from Im::args.._t

была взята из недавнего кода, на который Вы отписались, что прочитали и разобрались.. 
учитывая что сохранен комментарий, и сказано что это таблица, я думал не трудно было придти к заключению , что это cls_table.. 
так как других таблиц не было..

Цитата(boostcoder @  22.12.2010,  07:43 Найти цитируемый пост)
на основе импульс::аргс_..   получить указатель на метод и 

не думаю, что тут непонятно, что в шаблон передается impulse::args_mpl_seq_t, где тип конкретного импульса (Im) является одним из последовательности переданной таблице.. 

но.. если предположить что, непонятна связь между импульсом и таблицей, то вполне согласен, непонятночто вообще требуется..
но для этого я предлагаю регулярно задавать вопросы.. потому что без вопросов, на что сделать акцент, для улучшения понимания, я не знаю.. 

Цитата(boostcoder @  22.12.2010,  07:43 Найти цитируемый пост)
это не придирки, скорее, просьба осознать то, что то, что очевидно для Вас, совсем не обязано быть очевидно для меня

я это осознаю.. поэтому и переспрашиваю, есть ли где трудности, ну вот в частности :
Цитата(mes @  19.12.2010,  21:06 Найти цитируемый пост)
, чего то не получается ? или просто времени не было ?


Цитата(boostcoder @  22.12.2010,  07:43 Найти цитируемый пост)
что дальше делаем? дайте мне чего-то накодить.

ну так сейчас по плану все та же таблица.. smile
сейчас приведу код еще раз smile

P.S. я подправил немного импульс, теперь в нем определены два типа :
args_normalized_t (вместо args_mpl_seq_t) и (старый)args_fused_t (получаеммый через args_normalized_t)

Добавлено через 6 минут и 8 секунд
вот опорный код, который надо приводить в порядок :

http://liveworkspace.org/code/c76453b89e92...1dfeccde6edd23c

Добавлено через 9 минут и 24 секунды
вот набросок инвокинга :
http://liveworkspace.org/code/995850590218...1de39a52ae2533c
с помощью которого можно, зная импульс и таблицу, можно произвести вызов..




--------------------
PM MAIL WWW   Вверх
mes
Дата 22.12.2010, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



немного теории.. есть два (нужных нам) варианта подхода к составлению таблицы  :
obj_table - где будет хранить полные замыкания, или функции.. то есть вызов происходит без наличия this.. 
cls_table - который хранить функции, в виде методов, то есть наличие this обязательно..

скорей всего для таблицы префикс не нужен..достаточно просто table, так как всего лишь контейнер, 
а способ хранения задается типом хранимого элемента... т.е  cls_/ obj_method.. (в коде как cls_item..)

Добавлено через 4 минуты и 20 секунд
исходя из этого таблица должна принимать последовательность, и один шаблонный параметр ячейки, который будет типизироваться элементом..

Добавлено через 5 минут и 34 секунды
но для начала нам нужно построить шаблон ячейки..

Добавлено через 10 минут и 25 секунд
ячейка характеризуется:
1. тип вызова (cls_ / obj_ )
2. для cls_ типом параметра this
2. набором аргументов (на основе impulse::args_normalized )
3. способом хранения.. (указатель, буст_функция, буст_сигнал)

Добавлено через 12 минут и 26 секунд
пункт я явно разделяет на два разноименных шаблона (как впрочем и предполагалось изначально)
для начала разберем только cls_.. второй (obj_) более простой и будет выполнен по подобию..


Это сообщение отредактировал(а) mes - 22.12.2010, 10:15


--------------------
PM MAIL WWW   Вверх
mes
Дата 22.12.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



итак имеем  :
  
Код

template < typename Im    // импульс
         , typename That  // тип объекта
         , template <typename> class Storage // способ хранения
         >
struct some_name // какое название пока не знаю
{
};


Добавлено @ 10:38
тестовое применение для наглядности:
Код

class some_class;
some_name< impulse<2, void (int, int)>
         , some_class
         , function_types::member_function_pointer > _some_name;


Добавлено @ 10:46
идем дальше :
Код

template < typename Im    // импульс
         , typename That  // тип объекта
         , template <typename> class Storage // способ хранения
         >
struct some_name // какое название пока не знаю
{
   typedef
     typename Storage< 
       typename invoke_detail::cls_method<
         That, Im
       >::type
     >
   type;
};


появился  invoke_detail::cls_method - эта структура, которая добавит const_ref к каждому элементу последовательности (Im::args_normalized)
запушфронтит That и void и сделает метод..

Добавлено @ 10:47
теперь информации достаточно ? для кодирования таблицы..
если нет жду вопросов.. smile



Это сообщение отредактировал(а) mes - 22.12.2010, 10:48


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1702 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.