对于我正在研究的微控制器项目,我正在编写一个共享库。我正在混合C和C ++,主要是因为需要在低级部分完成所有指针算术,因为我的代码很容易映射到C库。但是,在不同的微控制器上,我想将C ++用于硬件部分。作为HAL,我使用函数指针的结构来给出实现。
现在,指针在公共文件中声明,如:
extern HALPointer * _hal_ptr;
现在,在我的C文件中,我只是说
HALPointer _hal_ptr = (HALPointer) {
.init = &Native_init,
.destroy = &Native_destroy,
.write = &Native_write,
...
}
但是,在我的C ++文件中,我无法使用命名的初始化列表。我正在使用G ++支持c ++ 98,gnu ++ 98,c ++ 0x和gnu ++ 0x。有没有办法做到这一点?
编辑:这是在C ++文件中完成的,使用C调用约定等。
extern "C" {
}
也无法使用函数执行此操作。此外,元素的顺序可能会改变,因此需要命名成员初始化。
Edit2:在C++ Structure Initialization中,提供了一些解决方案,遗憾的是,这些解决方案不起作用或不合适。由于元素的顺序必然会发生变化(并且可能会添加项目等),因此非命名版本不是一个选项。最后一个解决方案无法编译。另一种解决方案至少可以说是可怕的。
EDIT3: 坚持可怕的解决方案:
extern "C" {
HALPointer _hal_ptr = (_hal_tr = HALPointer(),
_hal_ptr.init = &PRU_init,
_hal_ptr.destroy = &PRU_destroy,
....
_hal_ptr);
}