C++14模板类中如何获取模板结构体成员列表以实现批量操作?
实现符合特定要求的C++14类模板(基于GCC编译器)
需求
- 持有多个派生自同一基类的不同类对象,且所有派生类大小相同;
- 可通过函数对所有成员执行批量计算;
- 可单独访问列表中的每个对象;
- 列表与成员在编译期创建,无需动态列表;
- 接口简洁,适配C++经验较少的开发者。
期望的用户使用示例代码
// 传感器列表,每个成员对应一个传感器 typedef struct { cOneSensor_f A4_temp1 = cOneSensor_f ("A4t1", 0x1234 /*, x, y, ... 更多配置数据*/); cOneSensor_i B4_speed = cOneSensor_i ("B4s0", 0x2001 /*, x, y, ... 更多配置数据*/); }Sensor_list_4_s; // 将列表放入类模板中,既能整体控制所有传感器, // 也能单独访问每个传感器 cSensorsList<Sensor_list_4_s> Sensor_list_4( 4 ); // 获取传感器数值 void do_sensors_stuff() { // 操作所有传感器 Sensor_list_4.update(); // 单独访问每个传感器 float A4t1 = Sensor_list_4.A4_temp1(); int B4s0 = Sensor_list_4.B4_speed(); }
初步实现思路与当前状态
已定义基类cOneSensor及派生类cOneSensor_f、cOneSensor_i,通过模板类cSensorsList<T>继承T以获取成员访问能力,初步代码如下:
class cOneSensor {}; class cOneSensor_f : public cOneSensor {}; class cOneSensor_i : public cOneSensor {}; template <typename T> class cSensorsList: public T { private: int bus_code; cOneSensor *p_to_sensors_array; int nSensors; public: cSensorsList(int bus_code):bus_code(bus_code) { // --- 我不知道该怎么实现:从类型T中获取传感器列表 nSensors = 0; // getSensorListSize_from_T(/* T */); p_to_sensors_array= 0;// getSensorListPointer_from_T<T>(/* T */); // --- } void update(void) { for (int i=0; i<nSensors; i++) p_to_sensors_array[i].update(); } };
已实现功能
cSensorsList可单独访问每个成员对象;- 用户接口简洁;
- 所有对象封装在类中。
待解决问题
在cSensorsList<T>类中,如何获取模板结构体T的成员列表,构造指针数组以实现对所有成员的批量操作(如调用update函数)。
内容的提问来源于stack exchange,提问作者piedramania
相关产品推荐
相关产品推荐

