Шаблон C++: доступ к членам из структуры исходного шаблонаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Шаблон C++: доступ к членам из структуры исходного шаблона

Сообщение Anonymous »

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»