Скачать MetaTrader 5

Обсуждение статьи "Применение псевдошаблонов как альтернатива шаблонов С++"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
192513
MetaQuotes Software Corp.  

Опубликована статья Применение псевдошаблонов как альтернатива шаблонов С++:

В статье описывается прием программирования, позволяющий обойтись без механизма шаблонов, при этом сохранив стиль программирования, присущий им. Рассмотрены особенности реализации шаблонов пользовательскими методами, прилагается готовый к эксплуатации код скрипта, создающий код на основе указанных шаблонов.

Автор: Николай

Гребенев Вячеслав
1039
Гребенев Вячеслав  

Статья понравилась, хоть я ничего и не понял.

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

А зачем мучаться с шаблонами, ведь можно и копи-пастом обойтись? А количество набранного кода совсем не напрягает- ну будет 300 строк кода вместо 100 - и что плохого? Главное чтоб работало, и отладка не перенапрягала.

Да и без шаблонов код прозрачней будет.

Vladimir Batrudinov
4867
Vladimir Batrudinov  
Virty:

Статья понравилась, хоть я ничего и не понял.

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

А зачем мучаться с шаблонами, ведь можно и копи-пастом обойтись? А количество набранного кода совсем не напрягает- ну будет 300 строк кода вместо 100 - и что плохого? Главное чтоб работало, и отладка не перенапрягала.

Да и без шаблонов код прозрачней будет.

300 :)

А 10-20К как Вам (и это с учетом разбиения на модули)... ?

Гребенев Вячеслав
1039
Гребенев Вячеслав  
Interesting:

300 :)

А 10-20К как Вам (и это с учетом разбиения на модули)... ?

Неужели 20.000? Господи, как же вы там копаетесь? Может алгоритм до ума не додуман? Такие размеры надо давно в библиотеки скидывать. Что такое вы программируете? 20.000 строк это же на 10 программистов на полгода работы.
Vladimir Batrudinov
4867
Vladimir Batrudinov  
Virty:
Неужели 20.000? Господи, как же вы там копаетесь? Может алгоритм до ума не додуман? Такие размеры надо давно в библиотеки скидывать. Что такое вы программируете? 20.000 строк это же на 10 программистов на полгода работы.

На счет библиотек, я же сказал - с учетом модулности.

На счет 20К - Видели и по более. К примеру модцли для 1С 7.7 по 50К строк (и это не своего, а чужого кода).


Vladimir Batrudinov
4867
Vladimir Batrudinov  
Николай, хорошая статья. Обязательно поэкспериментирую, может понравится и буду юзать "шаблоны" в MQL5.

Igor Volodin
4236
Igor Volodin  

Простите, если не понял сути задачи. В 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, чтобы компилятор не ругался. При первом запуске код создастся, при повторном - будет инклудить сгенеренный кусок.

Dennis Kirichenko
11978
Dennis Kirichenko  

Николай, вопрос такого плана. Нет у вас функции, которая бы оценивала строку? Т.е. например:

str="double a=1.5;"

void eval(str);
Print(a); // a=1.5

Нужна функция void eval(str), с результатом a=1.5.

Статья хорошая, спасибо!


Nikolay Demko
12912
Nikolay Demko  
denkir:

Николай, вопрос такого плана. Нет у вас функции, которая бы оценивала строку? Т.е. например:

Нужна функция 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 ;"
ну вы поняли. Могу только порекомендовать изучить на простых примерах функционал раздела строковых функций. Если у вас появится оперирование функциями по памяти, то вы сможете планировать разработку исходя из возможностей функционала. Не задумываясь о том что сделать можно, а что нельзя. Зная возможности функционала вы будете чётко представлять, какой алгоритм будет самым подходящим для решения именно вашей задачи.
Dennis Kirichenko
11978
Dennis Kirichenko  
Urain:

Так понимаю что вопрос не в оценке, а парсинге. Парсинг очень многогранен.

Можно прописывать разные правила. Всё зависит от того что вы хотите получить.

Например: как должен парсер вести себя в таких примерах

ну вы поняли. Могу только порекомендовать изучить на простых примерах функционал раздела строковых функций. Если у вас появится оперирование функциями по памяти, то вы сможете планировать разработку исходя из возможностей функционала. Не задумываясь о том что сделать можно, а что нельзя. Зная возможности функционала вы будете чётко представлять, какой алгоритм будет самым подходящим для решения именно вашей задачи.
спасибо большое за ответ... изучу вопрос
Nikolay Demko
12912
Nikolay Demko  
denkir:
спасибо большое за ответ... изучу вопрос
Кстати для string'ов определены логические операции < > ==.
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
  • www.mql5.com
Основы языка / Операции и выражения / Логические операции - Документация по MQL5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий