Доступ к членам структуры по типу доступа к членам массива.

 

Могу ошибаться но где то видел что значения структуры можно получить по типу получения данных из массива.

Есть большая структура на 60 членов.

Все структуру нужно вывести на экран через объекты, выводить почленно очень долго и не практично.

есть ли возможность получить значение по типу как их массива ? По индексу например?

 
Если в POD-структуре все поля одного типа, то очень просто по индексу читать и писать.
 
fxsaber:
Если в POD-структуре все поля одного типа, то очень просто по индексу.

Можно пример ?

 
Не совсем понял, что вам надо, но попробуйте распечатать структуру через ArrayPrint:
A data;
A arr[1];
arr[0] = data;
ArrayPrint(arr);
 
struct SS{
   int i1;
   int i2;
};

union UU{
   SS s;
   int a[2];
};

UU u;

void OnStart(){

      u.s.i1=1;
      u.s.i2=2;      
      
      Alert(u.a[0]," ",u.a[1]);
      
      u.a[0]=11;
      u.a[1]=22;
      
      Alert(u.s.i1," ",u.s.i2);
   
  }
 

есть структура

struct str

{

string a1;

.....

string a100;

};

Как получить значение структуры по индексу ? Массиве просто mass[60],  в структуре как ?

 
Vladimir Pastushak:

Можно пример ?

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

template <typename T>
struct STRUCT
{
  T a1;
  T a2;
};

voidOnStart()
{
  STRUCT<double> Struct = {12, 34};
  
  for (int i = 0; i < sizeof(Struct); i += sizeof(double))
  {   
    Print(_R(Struct)[(double)i]); // Читаем по индексу.
    
    _W(Struct)[i] = (double)(i + 10); // Пишем по индексу
  }
  
  // Вывод через ArrayPrint
  STRUCT<double> StructArray[1];
  
  StructArray[0] = Struct;
  
  ArrayPrint(StructArray);
}
TypeToBytes
TypeToBytes
  • www.mql5.com
Эта кроссплатформенная библиотека позволяет удобно осуществлять побайтовую работу со структурами, массивами и стандартными типами данных. Побайтовое сравнение (== и !=) между собой структур, массивов и стандартных типов данных (в MQL по умолчанию отсутствуют операторы сравнения структур) в любом сочетании. Определение байтового смещения поля...
 

Как я понимаю, предложение fxsaber'а - самое нормальное.

Но, с другой стороны - суть структуры как раз в том, что это не массив. А если в структуре куча одинаковых по типу полей - то не правильнее сразу использовать именно массив ?

 
Georgiy Merts:

Как я понимаю, предложение  fxsaber'а - самое нормальное.

Но, с другой стороны - суть структуры как раз в том, что это не массив. А если в структуре куча одинаковых по типу полей - то не правильнее сразу использовать именно массив ?

В структуре 100 членов читать удобнее переменные. В массиве можно просто потеряться.

 
Vladimir Pastushak:

В структуре 100 членов читать удобнее переменные. В массиве можно просто потеряться.

ну тогда подпишите то, что боитесь потерять или если хотите добавить читаемость кода 

я так делал https://www.mql5.com/ru/code/viewcode/24829/222282/formsharp.mqh

подписал #define конкретные элементы массива

а где нужен просто вывод в цикле там и будете использовать просто массив

 
Vladimir Pastushak:

есть структура

struct str

{

string a1;

.....

string a100;

};

Как получить значение структуры по индексу ? Массиве просто mass[60],  в структуре как ?

А что, никто не увидел, что в структуре поля string? Со string никак!

Причина обращения: