これは簡単な質問のはずですが、正しく表現できないか、C 言語の経験がないために 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() を実行する前に何かを実行し、戻り値の型を変更する必要があります。