给出这样的定义(我可以改变):
#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个字节。
另一个考虑因素是我在资源受限的环境中工作,所以我希望在编译时计算偏移量。
有什么想法吗?