Это должен быть простой вопрос, но я, возможно, не смогу правильно его сформулировать или, возможно, я пытаюсь бросить вызов принципам языка C из-за отсутствия у меня опыта работы с ним.
Все, что я хочу сделать, это, имея указатель на функцию, обернуть его внутри другой функции, которая принимает указатель на функцию в качестве аргумента, и сделать указатель на более позднюю. Лучше в коде:
void do_nothing_1() {}
void do_nothing_2() {}
void wrapper(void(*f)()) { f(); }
int main() {
// the following will call the function
// but i just want a pointer of whats being called
funcion_pointer_1 = wrapper(do_nothing_1);
funcion_pointer_2 = wrapper(do_nothing_2);
return 0;
}
Я заранее извиняюсь, если вопрос не имеет никакого смысла, пожалуйста, помогите мне прояснить его, а не просто понизить его.
Изменить: учитывая очевидную сложность получения желаемых результатов из-за неясности требований, я буду немного более конкретным в отношении того, что я ищу.
Внутри структуры у меня есть указатель на функцию:
struct my_struct {
int (* run)(void);
}
Что я хочу сделать, так это изменить эту функцию, и поэтому я использую оболочку. Так, например, если foo возвращает void, измените это на int. Кроме того, запустите некоторый код перед выполнением foo:
int wrapper(void (*foo)()) {
// exec some stuff here
foo();
return 0;
}
В конечном счете, я хочу, чтобы при выполнении функции, соответствующей указателю *run из моей структуры, выполнить некоторые действия перед выполнением run() и изменить тип возвращаемого значения.
wrapper
? - person K-ballo   schedule 09.06.2012foo
- затенение усложнит ситуацию. - person jedwards   schedule 09.06.2012wrapper(foo)
не является функцией, поэтому вы не можете получить указатель функции на нее. - person K-ballo   schedule 09.06.2012