您可以像这样在 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;
您的代码仍然可以正常编译,但引入了严重的回归:您现在将初始化 func1 成员,而不是像以前那样设置 func2...
问题是关于 C++ 指定的初始值设定项是否等效:没有。问题关闭。