5

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

现在,指针在一个公共文件中声明,如下:

extern HALPointer * _hal_ptr;

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

HALPointer _hal_ptr = (HALPointer) {
   .init = &Native_init,
   .destroy = &Native_destroy,
   .write = &Native_write,
   ...
}

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

编辑:这是在 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);
}
4

0 回答 0