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

 

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

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

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

 

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

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

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

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

 
Virty:

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

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

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

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

300 :)

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

 
Interesting:

300 :)

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

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

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

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


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

 

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

 

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

str="double a=1.5;"

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

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

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


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

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

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

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

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