Сценарий:
Существует несколько структур C, каждая из которых содержит указатель на одну и ту же функцию.Эти указатели могут быть разными, если это необходимо (указатели на указатели и т. Д.), Но в конечном итоге все они должны указывать на одну и ту же функцию.
Проблема:
Когда функция вызывается из одного изуказатели, которые мне нужно получить, внутри функции, из структуры которой она была вызвана.
например,
typedef struct A {
void * (*func)();
... /* Custom properties */
} * A;
typedef struct B {
void * (*func)();
... /* Custom properties */
} * B;
A a_init() {
A a;
... /* Custom initialisation, allocation, etc. */
a->func = myFunc;
return a;
}
B b_init() {
B b;
... /* Custom initialisation, allocation, etc. */
b->func = myFunc;
return b;
}
int main () {
A a = a_init();
void *something = a->func();
}
void * myFunc () {
// Need to get pointer to the instance of the struct this was called from here
}
Есть ли способ получить указатель на вызывающего в myFunc
?При необходимости я думал о создании указателей на указатели и т. Д. На функцию, чтобы у каждого экземпляра объекта был свой указатель, и все они сохранялись бы в центральном месте, чтобы соответствовать им, но это явно не будетработать, если я не могу даже найти экземпляр объекта или указатель, который был использован.Есть идеи?
Редактировать:
Вопрос был задан несколько шире, чем я, по-видимому, сформулировал.Карри было бы отличным решением, если у кого-то есть какие-либо идеи относительно того, как реализовать его в C. У меня были некоторые идеи, но я просто вернулся к этому месту вместе с ним.