Неопределенные классы в динамической библиотеке |
Здравствуйте, гость ( Вход | Регистрация )
Неопределенные классы в динамической библиотеке |
Iron Bug |
5.11.2014, 13:04
Сообщение
#11
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
GUI тут вообще ни при чём. я так понимаю, что это обычный софт для тестирования работы алгоритмов.
надо не только создать некий объект с алгоритмом, но и вызывать его, с переменными параметрами. а вот тут-то и происходит затык. короче говоря, это вызов функции по указателю, с передачей заранее неизвестного числа аргументов. с dll это не проканает. тут надо городить какой-то огород со специальными методами передачи параметров, чтобы унифицировать вызовы. |
|
|
ViGOur |
5.11.2014, 13:15
Сообщение
#12
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
не обязательно, можно так же передавать указатель на структуру, в которой будут перечисленны параметры...
А лучше как я уже говорил, в указателе на класс! А в классе уже сделать стандартная реализация получения функции алгоритма, и параметром с их описанием! В предложенном мной варианте, как раз все просто! |
|
|
Iron Bug |
5.11.2014, 13:55
Сообщение
#13
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ну да. только без темплейтов получится монстр. потому что обработка разных типов параметров займёт туеву хучу кода. обработка совершенно одинакова для всех типов, но темплейты в случае с библиотеками не работают. нельзя экспортировать классы с шаблонами.
|
|
|
ViGOur |
5.11.2014, 14:34
Сообщение
#14
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Блин, блинский, это то у меня совсем из головы-то и вылетело!
Беру тайм-аут на подумать... |
|
|
Flex Ferrum |
5.11.2014, 16:12
Сообщение
#15
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 26.11.2007 Пользователь №: 26 Спасибо сказали: 0 раз(а) Репутация: 0 |
(зашёл сюда по приглашению ViGOur'а)
Мне видится такой вариант ответа на поставленный в первом посте вопрос - скомбинировать compiletime-анализ в runtime. Со стороны плагина делается следующее: 1. Для плагина делается небольшой шаблонный фреймворк, основная задача которого - принять сигнатуру тестируемой функции, констрейнты на аргументы и превратить это в универсальный invoke-ер. При этом фреймворк (используя typeinfo и typename для сигнатуры функции и для каждого аргумента) формирует набор структур, которые однозначно и с необходимой детализацией эту функцию описывают. В общем итоге плагин передаёт приложению следующую информацию: - Полученные на этапе компиляции структуры, описывающие типы аргументов функции и констрейнты на них; - Указатель на функцию-invoker (с точно заданной сигнатурой), которая получает на массив аргументов и передаёт их в тестируемую функцию. 2. Со стороны приложения делается runtime-анализатор данных, полученных от плагина. На основании этих данных строится GUI, прописываются валидаторы аргументов и т. д. Когда пользователь нажимает на кнопку "test" (или как она там будет называться), то введённые им аргументы превращаются в массив структур, и этот массив передаётся в invoke-ер. Там все элементы этого массива превращаются в аргументы тестируемой функции и делается собственно вызов. Для добавления type safety можно использовать boost::variant для передачи значений аргументов (ведь GUI будет работать с конечным набором типов). |
|
|
Текстовая версия | Сейчас: 27.12.2024, 6:53 |