Особенности языка mql5, тонкости и приёмы работы - страница 211

 
fxsaber #:

Вы сами 4ую ошибку сообщили. А чем ZeroMemory хуже {} ? Т.е. имеем некий несанкционированный механизм доступа к private, который компилятор почему то не обнаруживает.

Расчет на то, что Разработчики не будут это исправлять? Когда то компилятор и на ZeroMemory не реагировал

 
A100 #:

Вы сами 4ую ошибку сообщили. А чем ZeroMemory хуже {} ? Т.е. имеем некий несанкционированный механизм доступа к private, который компилятор почему то не обнаруживает.

Мне не видится это ошибкой. Структура без конструктора, идет инициализация. FileReadStruct - тогда совсем страшная вещь...

 
fxsaber #:

Мне не видится это ошибкой. Структура без конструктора, идет инициализация. FileReadStruct - тогда совсем страшная вещь...

uint  FileReadStruct( 
   int          file_handle,        // handle файла 
   const void&  struct_object,      // структура, куда происходит считывание 
   int          size=-1             // размер структуры в байтах 
   );

Судя по описанию - это какой то самообман

 
A100 #:

Судя по описанию - это какой то самообман

Ну, да - сплошной обман. 

 
A100 #:

Судя по описанию - это какой то самообман

Ссылки на документацию без учета артефактов копи-пасты - странно.

 
fxsaber #:

Ссылки на документацию без учета артефактов копи-пасты - странно.

Я вообще 1ый раз эту функцию вижу - могли бы и сообщить, что там в описании ошибка

Кроме описания там еще и структурная ошибка:

struct X {
    X( int i ) : i( i ) {}
    const int i;
};
void OnStart()
{
    X x( 5 );
    FileReadStruct( 0, x, -1 ); //(1) нормально ???
    ZeroMemory( x );            //(2) Error: 'x' - not allowed for objects with protected members or inheritance
}

А чем ZeroMemory хуже FileReadStruct ?

Опять расчет на то, что Разработчики не заметят\отложат\будет лень исправлять(нужное подчеркнуть) ?

Мой аргумент простой: когда то и ZeroMemory то же со всем этим (и private в том числе) компилировалось, но заметили\дошли руки\исправили

 
A100 #:

Я вообще 1ый раз эту функцию вижу - могли бы и сообщить, что там в описании ошибка

Ни разу не смотрел описание этой функции. Из названия все ясно.

Кроме описания там еще и структурная ошибка:

В следующем коде нет ошибок.

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {};

  uchar Bytes[];
  
  StructToCharArray(Ticks[0], Bytes);
  CharArrayToStruct(Ticks[1], Bytes);

  FileReadStruct(0, Ticks[0]);
  FileWriteStruct(0, Ticks[1]);
  
  FileWriteArray(0, Ticks);
  FileReadArray(0, Ticks);
}

Занудство не победит удобство!


А чем ZeroMemory хуже FileReadStruct ?

Вы же любите ссылаться на документацию. Там про ограничения ZeroMemory все написано. А про ограничения File* - нет. По ZeroMemory исхожу из того, что есть. Сейчас неудобно, но сделано, похоже, специально.

Если же сравнивать эти две функции, то FileReadStruct работает только с простыми структурами. В этом принципиальное отличие.


Эта тема про особенности MQL5. Указал на такую (в MQL4 не пашет). Данный диалог - к сожалению, бесцельно потраченное время

 
fxsaber #:

В следующем коде нет ошибок.

Вы же любите ссылаться на документацию. Там про ограничения ZeroMemory все написано. А про ограничения File* - нет. По ZeroMemory исхожу из того, что есть. Сейчас неудобно, но сделано, похоже, специально.

Если же сравнивать эти две функции, то FileReadStruct работает только с простыми структурами. В этом принципиальное отличие.

Ошибка есть (просто компилятор в данный момент о ней не сообщает) и заключается она в том, что некая функция (а именно FileReadStruct) внешняя по отношению к классу получает прямой доступ к защищенным членам этого класса, что противоречит самой концепции private, protected.

А чем эта функция лучше ZeroMemory и сотен других? А ничем! - просто у Разработчиков еще руки не дошли до нее. Раньше у ZeroMemory в документации тоже не было указано ограничений. А сейчас есть - и не потому чтобы доставить Вам какие то неудобства - а потому что единый прицип действует - что FileReadStruct, что ZeroMemory, что сотня других подобных функций - все равны

 
A100 #:

что сотня других подобных функций - все равны

FileLoad/FileSave еще в копилку неравенства.

Занудство не победит удобство!

Нет причин стрелять себе в ногу.

 
fxsaber #:

FileLoad/FileSave еще в копилку неравенства.

Нет причин стрелять себе в ногу.

Это Вы себе в ногу стреляете - объявлением private. Сами себе ограничили доступ и потом будете удивляться почему код, где внешним функциям нужен public доступ вдруг перестал работать