Использование объекта функции, когда API запрашивает указатель на функцию

Я хочу вызвать C API из C ++. API ожидает указатель на функцию, хотя для меня функциональность реализована в объекте функции C ++, потому что он имеет состояние.

Фактически желаемая функциональность разделена на два функциональных объекта. C api ожидает функцию, которая имеет два параметра указателя для возврата двух вещей, которые возвращает каждый из объектов функции.

Помимо определения глобальной функции, есть ли способ использовать объект функции из C. Например, может ли он быть переинтерпретирован в указатель функции?

редактирует:

Для простоты можно предположить, что подпись обратного вызова недействительна (*f)(void*, int*, int*)

Ох, и это должно быть C ++ — 03

0

Решение

Большинство API-интерфейсов позволяют передавать какое-то пользовательское состояние через пустой указатель. Вы можете передать указатель на ваш объект через него:

struct my_obj
{
void operator()(int*, int*) {}

static void forwarder(void *state, int *x, int *y) { (*(my_obj*)state)(x, y); }
};

void install_fn(void (*)(void*,int*,int*), void *state);

my_obj obj;
install_fn(my_obj::forwarder, &obj);

Для API, которые не позволяют вам переходить в какое-либо состояние (GLUT является одним из немногих, которые я обнаружил, которые приходят на ум), вам не повезло.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]