私は C で関数ポインターを使用する方法についていくつかの調査を行い、オブジェクト指向の種類のモデルを実行しようとしていました。そのようなものをモデル化するには、構造体に関数ポインタを追加して、一種の「オブジェクト」にする必要があると言われました。
私は C でのプログラミングにかなり慣れていないので、この質問は少しばかげているように思えるかもしれません (または非常に簡単に答えることができます) が、インターネット上で C++ に関する例を見つけただけで、それは私が探しているものではありません。
私の質問が何であるかを簡単に理解できるように、以下に例を示します。
try.h-ファイル:
struct thing {
void (*a)(int, int);
};
void add(int x, int y);
try.c-ファイル:
#include <stdio.h>
#include <stdlib.h>
#include "try.h"
void add(int x, int y) {
printf("x + y = %d\n", x+y);
}
int main(int argc, char* argv[]) {
struct thing *p = (struct thing*) malloc(sizeof(struct thing));
p->a = &add;
(*p->a)(2, 3);
free(p);
p = NULL;
return 0;
}
例として、私は always を持ちたいx = 2
ので、の関数ポインターはstruct thing
この種のポインターになり、もうvoid (*a)(int)
ありませvoid (*a)(int, int)
ん。
x = 2
関数ポインターを構造体に渡すときに引数をバインドするにはどうすればよいですか (行p->a = &add;
)? これはCでも可能ですか?C++ では のようなものを見たことがありますが、C ではstd::bind
これを行うことができませんでした。