В вашем образце да в C компилятор сможет использовать указатель Base_Struct * и элементы доступа. Вы можете использовать одно и то же определение структуры в файлах C и CPP без проблем. Пока это Cpp, который создает структуру для файла C, компилятор выполнит эту работу.
void Give_Typed_Pointer_to_C_Function(Base_Struct* pStruct) {...}
void Give_Pointer_to_C_Function(void* pStruct) {...}
Base_Struct A;
Derived B;
Give_Typed_Pointer_to_C_Function(&A); // OK
Give_Typed_Pointer_to_C_Function(&B); // OK
Give_Pointer_to_C_Function(&A); // OK
Give_Pointer_to_C_Function(&B); // wrong
Give_Pointer_to_C_Function((Base_Struct*)&B); // OK
Для этой работы вы должны использовать один и то же выравнивание и упаковку структуры, но, как вы передаете указатель Я полагаю, вы же проект так и должно быть уже так.
Вы даже можете сделать больше, если вы держите структуры в том порядке,
struct S1 { int x;
int y;
};
class C1 { int x;
int y;
int add(int,int);
};
void Give_Typed_Pointer_to_C_Function(S1 *pStruct);
C1 object;
Give_Typed_Pointer_to_C_Function((S1*)&object); // OK
// an safer alternative as you can't have to be sure that S1 and C1 match
struct C1 { int x;
int y;
#ifdef __cplusplus
int add(int,int);
#endif
};
Если поставить CPP ключевое слово как класс/государственные/частные и методы структуры с Определяешь. И если вы не используете наследование, это будет работать.
Мое понимание распределения структур классов заключается в том, что базовый класс является первым, а члены класса dirived сохраняются после базового класса. Это должно сработать. Но я не юрист по языку, поэтому не верьте мне на слово. Массив структур может не работать, поскольку они будут больше, чем Base_Struct. –