在xmacro中累积值

时间:2018-04-07 20:17:02

标签: c++

给出这样的定义(我可以改变):

#define NUMERIC_FIELD_LIST \
FIELD(temperatureCalibrationFactor, float, TEMPERATURE_CALIBRATION_FACTOR_ADDR, getTemperatureCalibrationFactor, setTemperatureCalibrationFactor) \
FIELD(temperatureCalibrationOffset, float, TEMPERATURE_CALIBRATION_OFFSET_ADDR, getTemperatureCalibrationOffset, setTemperatureCalibrationOffset) \
FIELD(humidityCalibrationFactor,    float, HUMIDITY_CALIBRATION_FACTOR_ADDR,    getHumidityCalibrationFactor,    setHumidityCalibrationFactor)    \
FIELD(humidityCalibrationOffset,    float, HUMIDITY_CALIBRATION_OFFSET_ADDR,    getHumidityCalibrationOffset,    setHumidityCalibrationOffset)    \

我尝试使用xmacro生成如下代码:

static const int TEMPERATURE_CALIBRATION_FACTOR_ADDR = 0
static const int TEMPERATURE_CALIBRATION_OFFSET_ADDR = TEMPERATURE_CALIBRATION_FACTOR_ADDR + sizeof(temperatureCalibrationOffset);  
static const int HUMIDITY_CALIBRATION_FACTOR_ADDR    = TEMPERATURE_CALIBRATION_OFFSET_ADDR + sizeof(humidityCalibrationFactor); 
static const int HUMIDITY_CALIBRATION_OFFSET_ADDR    = HUMIDITY_CALIBRATION_FACTOR_ADDR    + sizeof(humidityCalibrationOffset); 

请注意,每个项目都指向上一行中定义的值。明显(和脆弱)的解决方案是将前一项的名称放入xmacro定义本身,但这似乎是最后的手段(并且手动维护目标代码甚至可能更好)。

我尝试了一些创造性的想法,比如使用虚拟结构和offsetof宏,但这会将我的尺寸填充到4的倍数,这是我不想要的。

对于一小部分上下文,我尝试创建的常量将用于紧密压缩流中的本质字节位置。在该上下文中,char将仅占用一个字节,即使在内存中它可能占用4个字节。

另一个考虑因素是我在资源受限的环境中工作,所以我希望在编译时计算偏移量。

有什么想法吗?

0 个答案:

没有答案