Я знаю, что когда вы загружаете динамическую библиотеку C ++ с помощью dlopen (), вы можете получить указатели на функции внутри этой библиотеки, но есть ли способ эффективно (производительность имеет значение) сделать это по-другому?
Я знаю, что я мог бы просто вызвать функцию (при инициализации библиотеки) внутри библиотеки, передавая массив указателей на функции, или просто отправляйте указатели по отдельности в функцию. (хотя массив, вероятно, будет лучше, потому что он позволяет мне добавлять функции, но не требует обновления всех старых плагинов)
Я не совсем уверен, что это эффективно, так как может быть сотни функций, и отправка всех из них, возможно, в 10 библиотек может быть неэффективной.
Но я не очень разбираюсь в динамических библиотеках, поэтому мне просто интересно, знаете ли вы, ребята, что лучше сделать это.
РЕДАКТИРОВАТЬ: Может быть, поместить все эти функции в класс, а затем отправить указатель класса через вызов функции? Будет ли это работать?
«Но я не очень разбираюсь в динамических библиотеках»
Это сигнал, чтобы сказать: вы не хотите этого делать.
Возможно, посмотрите на Boost Extension (не является официальной частью boost), которая использует высокоуровневый подход C ++.
Тем не менее, большинство платформ поддерживают это до некоторой степени. Например. XlC ++ в AIX имеет rtld (который требует явной «экспортированной» карты символов, IIRC), и у меня была такая же работа с windows и linux (наш сторонний движок рабочего процесса требовал этого). Отправка массива fptrs кажется наиболее прагматичной и ближе к шаблону «плагинов».
Других решений пока нет …