用C ++定义填充成员

时间:2017-11-29 21:07:17

标签: c++

有没有办法在结构中使用宏填充,我的意思是:

struct Monument{
    char name[32];
    PADDING( 4 * sizeof(int));
    int cityId;
    PADDING( 4 * sizeof(int));
    int age;

}

PADDING(s)宏只会增加空间。

1 个答案:

答案 0 :(得分:1)

你可以这样定义:

#define TOKENPASTE(x, y) x ## y
#define TOKENPASTE2(x, y) TOKENPASTE(x, y)
#define PADDING(size) char TOKENPASTE2(padding_, __LINE__) [size]

根据需要更改字段名称前缀(最好不要使用前缀 与其他可能的成员发生冲突)。

请记住(正如Remy Lebeau和FrançoisAndrieux在评论中所提到的那样)编译器有时会添加意外的填充。供参考,您可以阅读:

编辑:抱歉,初始代码不正确(在宏中错误地使用了__LINE__扩展)。我使用以下解决方案修复了它:https://stackoverflow.com/a/1597129/1561140