Содержит список объектов разных классов, производных от одного базового класса.
Все эти объекты имеют одинаковый размер (производные классы имеют одинаковый размер).
Возможность выполнять некоторые вычисления для всех членов функции .
Имеет член для индивидуального доступа к каждому объекту списка.
Список и члены могут быть созданы во время компиляции, нет необходимости в динамических списках.
Пользовательский интерфейс должен быть простым, поскольку он будет использоваться много раз разными программистами в командах с небольшим опытом работы с 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]
Содержит список объектов разных классов, производных от одного базового класса.
Все эти объекты имеют одинаковый размер (производные классы имеют одинаковый размер).
Возможность выполнять некоторые...
Содержит список объектов разных классов, производных от одного базового класса.
Все эти объекты имеют одинаковый размер (производные классы имеют одинаковый размер).
Возможность выполнять некоторые...
Я реализую дерево на C++ с помощью связанных списков. Я определил структуру Node в закрытом разделе моего класса GenericTree, но по-прежнему могу получить доступ к ее членам из основной функции, что меня смущает.
//