c++ - 共享一个平台的部分结构,同时将其他平台的部分结构屏蔽掉

标签 c++ c structure cross-platform bit

我正在编写一段代码,该代码具有某种带有位字段的结构,其中其中一个成员需要用于一个平台,而对于其他平台则被涂黑。示例:

struct FooBar
{
    int iFoo: 1, <----------------- Used only for platform 'X'
        iBar: 1, <----------------- Used on platforms 'X' and Y''
        unused: 2; <--------------- Would change to 2 or 3 based of platform
};

一个简单直接的解决方案是使用 ifdef 宏。但它看起来不干净,也不是一个好的工程方法。 我希望该结构是跨平台的。有没有办法在不使用 ifdef 内部结构的情况下做到这一点?

我尝试在平台 X 上使用 #define SIZEFOO 0 并用此宏替换位字段,但它提示位字段宽度为零。

最佳答案

“我想保留它用于 C” - 继续我的评论:然后让我们模拟多态性:

struct FooBar
{
   // only the variables common to ALL structs
};

struct FooBarX
{
   struct FooBar common;
   // specific variables here
};

如果您将公共(public) FooBar 始终设置为第一个成员,则可以在 FooBar*FooBarX* 之间安全地进行转换,作为结构体的地址和第一个成员的地址总是一样的。重要提示:但这仅适用于 C! C++ 在这方面有所不同:在 C++ 中,这只适用于 standard layout types – 然而,这里的情况就是这样......

关于c++ - 共享一个平台的部分结构,同时将其他平台的部分结构屏蔽掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302040/

相关文章:

c# - 一起调试托管和非托管代码

来自 txt : Only reads first square 的 C++ 魔方

c++ - 了解设计模式用例

c++ - 在删除和重新插入元素时遍历树

c++ - pthreads 中的条件变量和释放多个锁

algorithm - 程序员应该参加 ACM 竞赛培训吗?

c++ - logb() 和 ilogb() 有什么区别?

java - 新创建的对象是否给我内存位置或保存新分配的内存位置地址的指针

c - 读取csv并在C中返回2d数组的函数

c - 如何显示和替换员工数据?