在C ++中初始化C结构

时间:2013-05-21 13:06:27

标签: c++ c struct initializer

对于我正在研究的微控制器项目,我正在编写一个共享库。我正在混合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);
}

0 个答案:

没有答案