在C++中初始化C结构

Chr*_*ong 5 c c++ struct initializer

对于我正在研究的微控制器项目,我正在编写一个共享库.我正在混合C和C++,主要是因为需要在低级部分完成所有指针算术,因为我的代码很容易映射到C库.但是,在不同的微控制器上,我想将C++用于硬件部分.作为HAL,我使用函数指针的结构来给出实现.

现在,指针在公共文件中声明,如下所示:

extern HALPointer * _hal_ptr;
Run Code Online (Sandbox Code Playgroud)

现在,在我的C文件中,我只是说

HALPointer _hal_ptr = (HALPointer) {
   .init = &Native_init,
   .destroy = &Native_destroy,
   .write = &Native_write,
   ...
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的C++文件中,我无法使用命名的初始化列表.我正在使用G ++支持c ++ 98,gnu ++ 98,c ++ 0x和gnu ++ 0x.有没有办法做到这一点?

编辑:这是在C++文件中完成的,使用C调用约定等.

extern "C" {

}
Run Code Online (Sandbox Code Playgroud)

也不可能使用函数来执行此操作.此外,元素的顺序可能会改变,因此需要命名成员初始化.

编辑2:在C++结构初始化中,提出了一些解决方案,遗憾的是,这些解决方案不起作用或不合适.由于元素的顺序必然会发生变化(并且可能会添加项目等),因此非命名版本不是一个选项.最后一个解决方案无法编译.另一种解决方案至少可以说是可怕的.

编辑3:坚持可怕的解决方案:

extern "C" {
   HALPointer _hal_ptr = (_hal_tr = HALPointer(), 
                     _hal_ptr.init =      &PRU_init,
                     _hal_ptr.destroy =   &PRU_destroy,
                     ....
                     _hal_ptr);
}
Run Code Online (Sandbox Code Playgroud)