Статья понравилась, хоть я ничего и не понял.
"Поэтому основной задачей, решаемой шаблонами, все же остается уменьшение количества кода, набранного программистом с клавиатуры."
А зачем мучаться с шаблонами, ведь можно и копи-пастом обойтись? А количество набранного кода совсем не напрягает- ну будет 300 строк кода вместо 100 - и что плохого? Главное чтоб работало, и отладка не перенапрягала.
Да и без шаблонов код прозрачней будет.
Статья понравилась, хоть я ничего и не понял.
"Поэтому основной задачей, решаемой шаблонами, все же остается уменьшение количества кода, набранного программистом с клавиатуры."
А зачем мучаться с шаблонами, ведь можно и копи-пастом обойтись? А количество набранного кода совсем не напрягает- ну будет 300 строк кода вместо 100 - и что плохого? Главное чтоб работало, и отладка не перенапрягала.
Да и без шаблонов код прозрачней будет.
300 :)
А 10-20К как Вам (и это с учетом разбиения на модули)... ?
300 :)
А 10-20К как Вам (и это с учетом разбиения на модули)... ?
Неужели 20.000? Господи, как же вы там копаетесь? Может алгоритм до ума не додуман? Такие размеры надо давно в библиотеки скидывать. Что такое вы программируете? 20.000 строк это же на 10 программистов на полгода работы.
На счет библиотек, я же сказал - с учетом модулности.
На счет 20К - Видели и по более. К примеру модцли для 1С 7.7 по 50К строк (и это не своего, а чужого кода).
Простите, если не понял сути задачи. В C++ есть экономия записи в исходном коде, здесь нет. Шаблоны функций в C++ показывают, где действительно можно сэкономить. "Сэкономить исходный код" - ключевая идея.
А генерация явно избыточного количества исходного кода, для затруднения работы над ним впоследствии, ну уж нет, увольте.
Нужна одна и та же функция для разных типов данных? В MQL5 есть перегрузка методов. Не сомневаюсь, что вы про нее знаете. Тем более, что изменив тип входных данных, часто требуется менять реализацию.
И насчет этого:
>>Для отладки, конечно, придется переместить файл в директорию вызываемого файла или директорию Include. Именно об этом неудобстве отладки я и говорил выше, когда упоминал о недостатках псевдошаблонов.
вручную ничего перемещать не нужно.
#property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void gena() { string filename="code.mqh"; int handle=FileOpen(filename,FILE_WRITE|FILE_UNICODE); //-- произвольная генерация кода string st=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS); string code="MessageBox(\"Привет Мир! Сейчас: "+st+"\");\r\n"; //------------------------------ FileWriteString(handle,code); FileClose(handle); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { //--- gena(); #include "../Files/code.mqh"; //инклудим сгенеренный код //--- return(0); }
Пример примитивный. Инклуды можно вставлять внутрь функций. И весь код в включаемом файле действует в области видимости места вставки. Единственно, придется для начала создать пустой файл code.mqh в Files, чтобы компилятор не ругался. При первом запуске код создастся, при повторном - будет инклудить сгенеренный кусок.
Николай, вопрос такого плана. Нет у вас функции, которая бы оценивала строку? Т.е. например:
Нужна функция void eval(str), с результатом a=1.5.
Статья хорошая, спасибо!
Так понимаю что вопрос не в оценке, а парсинге. Парсинг очень многогранен.
Можно прописывать разные правила. Всё зависит от того что вы хотите получить.
Например: как должен парсер вести себя в таких примерах
"double a=1.5;" "double a =1.5;" "double a = 1.5;" "double a=1.5,b=2.5;" "double a =1.5,b =2.5;" "double a = 1.5,b = 2.5;" "double a = 1.5 , b = 2.5 ;"ну вы поняли. Могу только порекомендовать изучить на простых примерах функционал раздела строковых функций. Если у вас появится оперирование функциями по памяти, то вы сможете планировать разработку исходя из возможностей функционала. Не задумываясь о том что сделать можно, а что нельзя. Зная возможности функционала вы будете чётко представлять, какой алгоритм будет самым подходящим для решения именно вашей задачи.
Так понимаю что вопрос не в оценке, а парсинге. Парсинг очень многогранен.
Можно прописывать разные правила. Всё зависит от того что вы хотите получить.
Например: как должен парсер вести себя в таких примерах
ну вы поняли. Могу только порекомендовать изучить на простых примерах функционал раздела строковых функций. Если у вас появится оперирование функциями по памяти, то вы сможете планировать разработку исходя из возможностей функционала. Не задумываясь о том что сделать можно, а что нельзя. Зная возможности функционала вы будете чётко представлять, какой алгоритм будет самым подходящим для решения именно вашей задачи.спасибо большое за ответ... изучу вопрос
![Документация по MQL5: Основы языка / Операции и выражения / Логические операции Документация по MQL5: Основы языка / Операции и выражения / Логические операции](/i/community/logo_mql5_small.png)
- www.mql5.com
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Применение псевдошаблонов как альтернатива шаблонов С++:
Автор: Николай