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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Pastushak
146342
Vladimir Pastushak  

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

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

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

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

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

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

Sergey Dzyublik
4159
Sergey Dzyublik  
Не совсем понял, что вам надо, но попробуйте распечатать структуру через ArrayPrint:
A data;
A arr[1];
arr[0] = data;
ArrayPrint(arr);
Dmitry Fedoseev
53660
Dmitry Fedoseev  
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);
   
  }
Vladimir Pastushak
146342
Vladimir Pastushak  

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

struct str

{

string a1;

.....

string a100;

};

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

fxsaber
13590
fxsaber  
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 по умолчанию отсутствуют операторы сравнения структур) в любом сочетании. Определение байтового смещения поля...
Georgiy Merts
8509
Georgiy Merts  

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

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

Vladimir Pastushak
146342
Vladimir Pastushak  
Georgiy Merts:

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

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

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

Igor Makanu
7715
Igor Makanu  
Vladimir Pastushak:

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

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

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

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

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

Dmitry Fedoseev
53660
Dmitry Fedoseev  
Vladimir Pastushak:

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

struct str

{

string a1;

.....

string a100;

};

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий