次のようにCで構造体を宣言できます。
typedef struct MyStruct {
const char *name;
int (*func1)(void);
int (*func2)(void);
int (*func3)(void);
} MyStruct;
int test_func2(void) {
return 0;
}
MyStruct test_struct = {
.name = "buffer",
.func2 = test_func2,
};
これは、特定のメンバーのみを定義する場合に非常に便利です。他のすべてのメンバーは0/NULLに設定されます。
編集:特に、これによりMyStructがどのように定義されているかを詳細に知ることができないため、このタイプを使用してコードを壊すことなく、内部で変更したり、新しいメンバーを追加したりできます。
ただし、これはC ++コンパイラではコンパイルされませんが、エラーが発生します。
test.c:23: error: expected primary-expression before ‘.’ token
test.c:24: error: expected primary-expression before ‘.’ token
同じことを達成する同等のC++宣言はありますか?
ありがとう。
編集:@chris私はあなたが理解していないと言うことができます:)そして、私がどの構文を使うべきか、構造がどのように定義されるべきかなどについてコメントする他のほとんどの人々が完全に要点を見逃していることは明らかです。これは構造を定義する正しい方法ではありません。このスニペットはコンテキストを提供するためだけにありました。
コードの同等性については、コードのどこかで次のように言ってください。
MyStruct blah = { NULL, NULL, func2 };
MyStructは、その定義を次のように変更します。
typedef struct MyStruct {
const char *name;
int (*func4)(void);
int (*func1)(void);
int (*func2)(void);
int (*func3)(void);
} MyStruct;
コードは引き続き正常にコンパイルされますが、深刻なリグレッションが発生します。以前のようにfunc2を設定する代わりに、func1メンバーを初期化するようになりました...
質問は、同等のC++指定の初期化子があるかどうかについてでした。ありません。問題は解決しました。