Вы можете объявить структуру в 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 определен, поэтому он может меняться внутренне, добавляя новых членов и т.д., не нарушая при этом кода кода.
Это не будет компилироваться вместе с компилятором С++, получив ошибку:
test.c:23: error: expected primary-expression before ‘.’ token
test.c:24: error: expected primary-expression before ‘.’ token
Существует ли эквивалентная декларация С++ для достижения того же?
Спасибо.
Изменить: @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...
Вопрос был о том, есть ли инициализаторы на С++, эквивалентные: нет. проблема закрыта.