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