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)