Нужна помощь! - страница 3

 
A100:

virtual isUNICODE() { return ( false ); }

virtual isANSI() { return ( false ); } 

Зачем нужно это знание? Важно только при открытии, дальше ни холодно ни жарко.

A100:

если это чистая виртуальная то лучше так и оформить - зачем false - лучше сразу вызывать ошибку

Какую ошибку :) исключений-то нет. Можно всунуть ASSERT(false) для порядку, это-то точно не помешает.

А PURE... ну как бы вариант, но зависимый от возвращаемого типа, уж лучше я ручками все напишу, некритично.

A100:

в ОПП такого не бывает

Бывает как видите :)
 
TheXpert:

Зачем нужно это знание? Важно только при открытии, дальше ни холодно ни жарко.

Вся обработка должна идти в базовом классе - все методы будут практически идентичны - знание нужно для того, чтобы отличить ANSI от UNICODE в 3-4-х методах где эта обработка отличается,

а если Вы оставите всю обработку в производных классах - тогда нужно просто честно признать что это не ООП :) 

тогда Вам virtual и не нужно вовсе :) и кода у вас будет в 4 раза больше ;)

 
A100:

тогда нужно просто честно признать что это не ООП :) 

Нет, просто вам надо признать, что вы не понимаете почему это сделано так, а не иначе.

A100:

Не ясна причина почему Разработчики сэкономили на чистых виртуальных.

Тут я затрудняюсь ответить. Но проблема не из фатальных.
 
TheXpert:

Нет, просто вам надо признать, что вы не понимаете почему это сделано так, а не иначе.

Признаю - не понимаю - можете пояснить смысл использования нескольких совершенно одинаковых функций?

void FileImpl::Init()
Например две такие одинаковые - и остальные тоже :)

И еще - уберите в Ваших файлах ключевое слово - virtual - результат не изменится :)

 
A100:

Признаю - не понимаю - можете пояснить смысл использования нескольких совершенно одинаковых функций?

Неконстантные версии могут полностью наследоваться от константных, дублирования тогда бы не было.

Зато тогда пришлось бы открывать и тянуть за собой имплементацию, что по сути дало бы то же самое, что сейчас, только с дополнительной морокой и открытостями.

А сейчас юзеру достаточно подключить хедер с определением интерфейсов, а реализация полностью вшита в либу и может использоваться просто как ex5 даже без исходников, что было бы нереально, реализуй я ваше предложение.

A100:

И еще - уберите в Ваших файлах ключевое слово - virtual - результат не изменится :)

Ага, не изменится. Так помечены перегрузки интерфейса. Слово само по себе никак не мешает и оставляет возможность нормальной перегрузки этих же методов в потомках (если в MQL5 есть такая хрень)


 

Написал сегодня тоже самое - только другими словами - может прислушаются к чаяньям народа :)

https://www.mql5.com/ru/forum/11/page107#comment_386576

 
void FileImpl::Init()
{__TRACE
   // requesting size
   uint hi[1] = {0};
   uint low = GetFileSize(m_hFile, hi);
   
   m_Size = ulong(hi);
   m_Size = m_Size >> 32;
   m_Size += low;
возможно затирает hi (не проверял)
 

Ничего себе это же экономия стольких дней если недель  на создание своих приложении. Просто величайше и круто!

 Скорее всего после обновлении что то пишет ошибку в этой строке.

 m_Size = ulong(hi);

'hi' - invalid array access constfileunlimited.mq5 133 19

2019.02.03 16:06:28.963 fileunlimitedtest compilation of 'C:------------------------------\MQL5\Libraries\TheXpert\ConstFileUnlimited.mq5' failed