Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изврат с методоми. Как?

41K
27 декабря 2011 года
kisssko
108 / / 28.10.2010
Вопрос экспертам по C++. Нужен совет, как лучше реализовать несколько нестандартное решение. А то что то никак не разберусь.
Итак, предположим, есть некое приложение, и к нему набор модулей.
Модули представляют собой DLL, которые экспортируют единственную функцию GetInterface(),
которая принимает в качестве единственного параметра ссылку на структуру, и инициализирует её.
В дальнейшем, вся работа с модулем идёт через указатели на функции в структуре.
У всех этих функций первым параметром передаётся ссылка на вышеупомянутую структуру. Типа методы. :)
Само приложение будет написано на чистом Си, и являться некой средой, модули же будут взаимодействовать между собой.

Теперь о том, что же именно нужно, и при чём тут C++. А нужно вот что:

Нужно как то представить структуру в виде класса с методами, чтобы не в первом параметре передавать ссылку на структуру, автоматически передавалась бы ссылка this.
Это нужно для того, чтобы иметь возможность разрабатывать модули как на чистом Си, так и на на C++, и работать с интерфейсами других модулей объектно, как с экземплярами класса.

Но вот не пойму, как лучше реализовать. Нестатические методы не имеют адреса функции, а статическим не передаётся указатель this скрытым параметром.
240
27 декабря 2011 года
aks
2.5K / / 14.07.2006
Цитата: kisssko
Нестатические методы не имеют адреса функции


Имеют, куда они денутся то? Только вызывать их разумеется надо все равно у объекта, чтобы this подставился.

 
Код:
Type object;
typedef ReturnType (Type::*MethodType)(ParamType1, ParamType2);
...
MethodType method = &Type::ourMethod;
Type * objPtr = &object;
...
(objPtr->*method)(param1, param2);

=)
Вобще плохо понял, что ты хочешь, но возможно тебе стоит создать просто в интерфейса в DLL - один для C, другой для C++ если уж ты хочешь полноценные C++ классы из DLL брать? По крайней мере это простое и логичное решение.
535
27 декабря 2011 года
Нездешний
537 / / 17.01.2008
экспортировать из dll С-функции с первым параметром-ссылкой на структуру, а местах, где нужен С++, использовать классы-обертки?

Или действительно использовать дополнительный интерфейс для С++ - скажем, factory-function, возвращающий указатель на объект той самой структуры
16K
28 декабря 2011 года
asmforce
186 / / 05.01.2010
Есть решение, ещё более извращённое, чем поставленная задача, - создать полиморфный тип - абстрактный класс со всеми выткекающими.. вручную модифицировать vtable (ну да, это непереносимо, кстати в обоих смыслах). Короче говоря, эзотерика.

Других возможных решений, кроме класса-обёртки Нездешнего и полиморфного гибрида, способных сохранить соответствующий с++интаксис без модификации компилера... :confused:

P.S. Реализации ОО у всех разные. Это, кажется, у борланда указатель this передаётся в ecx?! Может это для Вас играет роль, но любое рещение не есть переносимым. Обёртка хороша тем, что её интерфейс будет совместимым на уровне исходников, но не реализация.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог