Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись программой в CodeBase. Получи доступ к миллионам трейдеров!
MetaQuotes Software Corp.
Модератор
181422
MetaQuotes Software Corp. 2011.02.22 16:35 

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

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

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

Гребенев Вячеслав
1039
Гребенев Вячеслав 2011.02.22 19:01  

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

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

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

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

Vladimir Batrudinov
4926
Vladimir Batrudinov 2011.02.22 19:24  
Virty:

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

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

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

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

300 :)

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

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

300 :)

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

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

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

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


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

Igor Volodin
3798
Igor Volodin 2011.02.22 23:47  

Простите, если не понял сути задачи. В 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
11331
Dennis Kirichenko 2011.03.07 13:07  

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

str="double a=1.5;"

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

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

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


Nikolay Demko
12464
Nikolay Demko 2011.03.07 15:27  
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
11331
Dennis Kirichenko 2011.03.26 17:36  
Urain:

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

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

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

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