Приведение void* к указателю на метод

205
23 декабря 2017, 06:00

Возникли трудности в процессе написания динамической библиотеки, содержащей реализацию методов класса. Библиотека подключается к главному файлу в runtime через dlopen. Используя dlsym я получаю указатель, который указывает на метод класса. Однако dlsym возвращает void*, а его приведение к указателю на метод вызывает ошибку.

class Matrix{
    void inputMatrix();
};
const char* INPUT_MATRIX_FUNC_NAME = "_ZN6Matrix11inputMatrixEv";
typedef void (Matrix::*inputMatrixPtrT)();
void* hdl = dlopen(LIBRARY_NAME, RTLD_LAZY);
inputMatrixPtrT inputMatrix =(inputMatrixPtrT)dlsym(hdl,INPUT_MATRIX_FUNC_NAME);

error: invalid cast from type ‘void*’ to type ‘inputMatrixPtrT {aka void (Matrix::*)()}’ inputMatrixPtrT inputMatrix = (inputMatrixPtrT)dlsym(hdl,INPUT_MATRIX_FUNC_NAME);

Как можно решить эту проблему?

READ ALSO
Доступ из одного класса к полям другого

Доступ из одного класса к полям другого

ЗдравствуйтеПытаюсь реализовать примитивный tower defence

210
Способы создания обьектов класса С++

Способы создания обьектов класса С++

Сколькими способами можно создать обьект класса на С++ в ООП?

219
DirectX9, освещение текстурированной модели

DirectX9, освещение текстурированной модели

Все делаю по технологии: создаю буфер вершин, задаю координаты вершин, координаты текстуры, нормалиБез освещения модель отрисовывается идеально

202
Поиск по содержимому файлов (С/C++ Linux)

Поиск по содержимому файлов (С/C++ Linux)

Задание следующее - В указанной директории найти обычные файлы, которые содержат одинаковые (по информации) строкиВывести: имя файла, права...

238