![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 7.9.2008, 00:01 |
||||||
|
|||||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Lazin, не то, не правильно Вам прояснил суть mes. Прочитайте мой последний пост, может, станет яснее. Дело в том что мой “инструмент” пользователь будет применять к своему MyClass, а как он у него объявлен, от какого класса унаследован, это сугубо его дело и я не хочу его как либо в этом ограничивать.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в Борланде Вы можете кстати описать указатель на метод с помощью __closure и на этом построить таблицу
Это сообщение отредактировал(а) mes - 7.9.2008, 00:12 |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Ван, момент, дайте дочитаю mes'a , пока не псте сообщений!
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
То есть Вы хотите чтоб любой пользовательский класс мог легко использовать свое тело для Библиотечного интерфейса. Процесс передачи реализации интерфейсу называется делегацией. Вы хотите своими макросами(или другими способами) упростить делегацию. Правильно ? помимо прямой делегации упомянутой в предыдущих примерах можно например использовать борландскую __closure, бустовые сигналы, библиотеку FastDelegate (http://www.rsdn.ru/article/cpp/fastdelegate.xml) , или Winnie.Closure (http://dobrokot.nm.ru/cpp/CppMethodsCallback.html) |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
хозяин - барин, я вам расхожую идиому привел, которая как раз и предназначена для диспетчеризации вызовов методов Добавлено через 12 секунд объекта |
|||
|
||||
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Да.
Нет, речь не идет о делегации, вовсе. Там совершенно другие задачи. Мой макрос:
Работает с адресами любых методов. Да и причем здесь методы, буть тут хоть переменные, члены класса, не важно! MSL.ReplaceMethod может оставаться черным ящиком, в рамках, задачи. Предложеный вами метод, всеьма изящен, хоть и не помогает решить задачу о которой я говорю. Опять ведь приходиться таскать за собой ExampleCalss(int a): INIT_TABLE {} или INIT_TABLE_(ExampleCalss). Было бы класно, если после слова TOOL_TABLE_END, пользователь мог забыть, о том, что от него что-то требуется еще. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага, я уже писал Я лишь привел пример организации таблицы, который не компилится если забыли проинициализоровать. Добавлено @ 00:50 так механизм можете оставить свой спрятав весь механизм внутри вспомогательного класса по аналогии приведенных выше примеров или добавив dummy - инициализатор #define INITIATOR(Class) class Initiator { public: Initiator (Class *p) { p->Init(); } } m_Initiator; если этот макрос спрятать в макросах описания таблицы, то пользователь не сможет забыть проинициализировать вашу таблицу Это сообщение отредактировал(а) mes - 7.9.2008, 01:00 |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Mes, да все верно, Ваш пример отлично решит задачу о целостности конструкции, назавем ее так. Еще раз отмечу, что мне ооочень понравилось. Но я пока еще хочу поломать голову над тем, чтобы эту самую конструкцию окончить на слове TOOL_TABLE_END. Спасибо, за помощь! Плюс пока не могу поставить (постов мало).
Если у кого будут идеи в сторону "непрописывания" кода в конструктор, я буду рад! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а как библиотека использует TMethodSpliceInterface ?
Он автоматически регистрируется при создании, или это делается внешней функцией? |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Экземпляр такого объекта создается при инициализации в памяти экземпляра класса над которым мы собираемся производить действия. Это сообщение отредактировал(а) vaddsm - 7.9.2008, 02:13 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
то что создается объект MSL, я видел. Как библиотека управляет этим интерфейсом ? просто запрашивается этот интерфейс у хозяина или он должен быть где то зарегестрирован? |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Пускай вас не смущает присутствие в название слова Interface, на самом деле это не абстрактный класс. Это обычный класс содержащий несколько методов, в задачу которого входит принять передоваемые параметры, обработать их и передать в нужном формате на вход внешней функции описаной в lib. Вообщем класс это "обычный", нет нигде он не регистрируется.
Это сообщение отредактировал(а) vaddsm - 7.9.2008, 02:38 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Нисколько не пугает название этого слова. Вопрос как происходит вызов нужного метода этого класса ? ну, например, есть такое:
кто, когда и как получает указатель на MSL ? Это сообщение отредактировал(а) mes - 7.9.2008, 02:56 |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Я же написал TMethodSpliceInterface - не абстрактный класс. А вызов его методов осуществляется:
И только. На этом область применения его оканчивается. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |