У меня есть небольшой DSL, который должен загружать разделяемые библиотеки и запускать функции, которые они экспортируют. Наконец, решенная проблема: dlopen
, dlsym
, LoadLibrary
и GetProcAddress
- все, что вам нужно для кросс-платформенного использования динамических библиотек. Это просто!
C ++ не согласен.
Благодаря dlsym
и т. Д. У меня есть все, что мне нужно: указатель на функцию из библиотеки, представление сигнатуры из исходного файла и ... нет возможности вызвать одну из них, используя другую.
Я просто хочу подтвердить свое мнение о том, что никакие хитрости с varargs, variadic шаблонами или другим волшебством не помогут, если вся информация о типах, которую я имею, является динамической. Я подойду к одному из следующих решений, а также хотел бы получить мнения, которые предпочтительнее (я склоняюсь к последнему).
Ограничить подпись принятием и возвратом маршализованного указателя объекта и написать оболочку для каждой библиотеки, с которой будет использоваться язык.
Скомпилируйте DSL на C-совместимый язык (читай: C ++), чтобы необходимая информация была доступна во время компиляции (читай: вторая компиляция).