Содержит список объектов разных классов, производных от одного базового класса.
Все эти объекты имеют одинаковый размер (производные классы имеют одинаковый размер).
Возможность выполнять некоторые вычисления для всех членов функции .
Имеет член для индивидуального доступа к каждому объекту списка.
Список и члены могут быть созданы во время компиляции, нет необходимости в динамических списках.
Пользовательский интерфейс должен быть простым, поскольку он будет использоваться много раз разными программистами в командах с небольшим опытом работы с C++.
Используйте C Стандарт ++14, компилятор gcc.
Пример пользовательского кода. Я хочу сделать это как можно проще:
//list of sensors with a member for each sensor
typedef struct {
cOneSensor_f A4_temp1 = cOneSensor_f ("A4t1", 0x1234 /*, x, y, ... and some more configuration data*/);
cOneSensor_i B4_speed = cOneSensor_i ("B4s0", 0x2001 /*, x, y, ... and some more configuration data*/);
}Sensor_list_4_s;
//put the list inside a class template to be able to control all of them as a whole,
//but also access each sensor individually
cSensorsList Sensor_list_4( 4 );
//get sensor values
void do_sensors_stuff()
{
//all sensors as a whole
Sensor_list_4.update();
//access each sensor individually
float A4t1 = Sensor_list_4.A4_temp1();
int B4s0 = Sensor_list_4.B4_speed();
}
За кулисами Это может быть настолько сложно, насколько это необходимо. Это может быть что-то вроде этого:
Базовый класс для объектов
Некоторые производные классы для различных вариантов объектов (я может управлять всеми производными классами из базы)
class cOneSensor {}
class cOneSensor_f: class cOneSensor {}
class cOneSensor_i: class cOneSensor {}
template
class cSensorsList: public T
{
private:
int bus_code;
cOneSensor *p_to_sensors_array;
int nSensors;
public:
cSensorsList(int bus_code):bus_code(bus_code)
{
//--- here is what I don't know how to do: get sensor list from typename T
nSensors = 0; //getSensorListSize_from_T(/* T */);
p_to_sensors_array= 0;//getSensorListPointer_from_T(/* T */);
// ---
}
void update(void) {
for (int i=0; i
✅ Простой с точки зрения пользователя.
[*] ✅ Все объекты в классе.
[/list]
[b]Но я не знаю, как[/b]:
[list]
[*]❌ [b]В классе cSensorsList, получить список членов структуры шаблона[/b], чтобы просмотреть все объекты в списке и выполнить некоторые действия: pointer_to_sensors_array = getSensorListPointer_from_T().
[/list]
Подробнее здесь: [url]https://stackoverflow.com/questions/79114081/c-template-access-members-from-source-template-struct[/url]
Я хочу создать следующий шаблон класса: [list] [*]Содержит список объектов разных классов, производных от одного базового класса. [*][b]Все эти объекты имеют одинаковый размер (производные классы имеют одинаковый размер).[/b] [*]Возможность выполнять некоторые вычисления для всех членов функции . [*]Имеет член для индивидуального доступа к каждому объекту списка. [*]Список и члены могут быть созданы во время компиляции, нет необходимости в динамических списках. [*]Пользовательский интерфейс должен быть простым, поскольку он будет использоваться много раз разными программистами в командах с небольшим опытом работы с C++. [*]Используйте C Стандарт ++14, компилятор gcc. [/list] Пример пользовательского кода. Я хочу сделать это как можно проще: [code]//list of sensors with a member for each sensor typedef struct { cOneSensor_f A4_temp1 = cOneSensor_f ("A4t1", 0x1234 /*, x, y, ... and some more configuration data*/); cOneSensor_i B4_speed = cOneSensor_i ("B4s0", 0x2001 /*, x, y, ... and some more configuration data*/); }Sensor_list_4_s;
//put the list inside a class template to be able to control all of them as a whole, //but also access each sensor individually cSensorsList Sensor_list_4( 4 );
//get sensor values void do_sensors_stuff() { //all sensors as a whole Sensor_list_4.update();
//access each sensor individually float A4t1 = Sensor_list_4.A4_temp1(); int B4s0 = Sensor_list_4.B4_speed(); } [/code] За кулисами Это может быть настолько сложно, насколько это необходимо. Это может быть что-то вроде этого: [list] [*]Базовый класс для объектов [*]Некоторые производные классы для различных вариантов объектов (я может управлять всеми производными классами из базы) [*]Класс шаблона для хранения списка объектов. [/list] [code]class cOneSensor {} class cOneSensor_f: class cOneSensor {} class cOneSensor_i: class cOneSensor {}
template class cSensorsList: public T { private: int bus_code; cOneSensor *p_to_sensors_array; int nSensors;
public: cSensorsList(int bus_code):bus_code(bus_code) { //--- here is what I don't know how to do: get sensor list from typename T nSensors = 0; //getSensorListSize_from_T(/* T */); p_to_sensors_array= 0;//getSensorListPointer_from_T(/* T */); // --- } void update(void) { for (int i=0; i ✅ Простой с точки зрения пользователя. [*] ✅ Все объекты в классе. [/list] [b]Но я не знаю, как[/b]: [list] [*]❌ [b]В классе cSensorsList, получить список членов структуры шаблона[/b], чтобы просмотреть все объекты в списке и выполнить некоторые действия: pointer_to_sensors_array = getSensorListPointer_from_T(). [/list]