Ошибка "ambiguous call to overloaded function" для виртуальных функций - почему ? - страница 5

 

Андрей, в принципе я понял о чем ты говоришь. Прочувствовал :)

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

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


 
Renat:

Ну понятно.

Теоретик-архитектор-фабрикостроитель в чистом виде.

Ну понятно :) нечего сказать по сути переходим на личности :) . Вы мое портфолио не видели.

Признавать костыли или принимать критику в штыки - сугубо ваш выбор. Я собственно на конструктив и не надеялся.

 
TheXpert:

Ну понятно :) нечего сказать по сути переходим на личности :) . Вы мое портфолио не видели.

Признавать костыли или принимать критику в штыки - сугубо ваш выбор. Я собственно на конструктив и не надеялся.

Я вас тоже понимаю, но для себя я решил подобный вопрос так - есть объекты, есть операции с ними, есть стандартная библиотека, построенная на них. Ничто не мешает создать свою библиотеку и пользоваться ей. Да, это костыль, но он нужен только единицам.

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

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
sergeev:

Иначе это не стд.либа, а набор для конкретного решения, пусть даже и широкого.

Именно набор для конкретного решения "объект коллекции" это и есть. Так и объявляется:

Класс CObject является базовым классом для построения стандартной библиотеки MQL5.

Класс CObject обеспечивает всем своим потомкам возможность быть элементом связанного списка. Кроме того определяется ряд виртуальных методов для дальнейшей реализации в классах-потомках.


 

Хотите багу? Вот просто после 15 минут просмотра кода? )

CArray<тип>::QuickSort(int beg,int end,const int mode)

аргумент mode не используется вообще.

А еще надо вспомнить отсутствие хоть одного перегруженного оператора (At и Update это круто :) ), публичный метод Shutdown, Search который работает только для сортированных массивов, а, еще классный метод Delta.

Нахрена для сайза применять знаковый тип? Массив может быть отрицательного размера?

Гг а что вообще такое вариант сортировки массива? Справка не хочет признаваться ))

 
TheXpert:

Хотите багу? Вот просто после 15 минут просмотра кода? )

CArray<тип>::QuickSort(int beg,int end,const int mode)

аргумент mode не используется вообще.

Он используется в CArrayObj, где передается в функцию Compare() для сравнения объектов. Причем эта функция наследуется от CArray. Так что тут небольшой оверхед по общности подхода.


А еще надо вспомнить отсутствие хоть одного перегруженного оператора (At и Update это круто :) ), публичный метод Shutdown, Search который работает только для сортированных массивов, а, еще классный метод Delta.

At и Update писались во времена, когда перегрузки еще не было. Это легко добавим.

Shutdown - претензия к публичности или названию? Публичность обоснована, а имя приемлемо.

Search без сортировки неразумен, тут такой подход.

Delta - в чем проблема? пишите конкретно. но похоже, просто смысла дельты в  методах поиска и сравнения не уловили


 
Понял. Бесполезно. Удачи.
 
TheXpert:
Понял. Бесполезно. Удачи.

То есть, ответить на мои вопросы не можете, как и привести обоснования.

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

 
Renat:

То есть, ответить на мои вопросы не можете, как и привести обоснования.

Эмм вы внимательно читали мною написанное?

Еще раз.

CArray<тип>::QuickSort(int beg,int end,const int mode)

аргумент mode не используется вообще.

Специально для вас вот метод

//+------------------------------------------------------------------+
//| Method QuickSort.                                                |
//+------------------------------------------------------------------+
void CArrayDouble::QuickSort(int beg,int end,const int mode)
  {
   int    i,j;
   double p_double,t_double;
//--- checking
   if(beg<0 || end<0) return;
//--- sort
   i=beg;
   j=end;
   while(i<end)
     {
      //--- ">>1" is quick division by 2
      p_double=m_data[(beg+end)>>1];
      while(i<j)
        {
         while(m_data[i]<p_double)
           {
            //--- control the output of the array bounds
            if(i==m_data_total-1) break;
            i++;
           }
         while(m_data[j]>p_double)
           {
            //--- control the output of the array bounds
            if(j==0) break;
            j--;
           }
         if(i<=j)
           {
            t_double=m_data[i];
            m_data[i++]=m_data[j];
            m_data[j]=t_double;
            //--- control the output of the array bounds
            if(j==0) break;
            else     j--;
           }
        }
      if(beg<j) QuickSort(beg,j);
      beg=i;
      j=end;
     }
  }

Снизойдите пожалуйста до того, чтобы попробовать найти аргумент mode в теле метода.

Затем внимательно перечитайте то что вы написали ))) выше.

Он используется в CArrayObj, где передается в функцию Compare() для сравнения объектов. Причем эта функция наследуется от CArray. Так что тут небольшой оверхед по общности подхода.

За последнюю фразу пять баллов ) . И про необоснованность тоже перечитайте. На всякий случай -- вы знаете как ShutDown переводится? Я так понимаю у вас практики ревью кода нет.

А потом... Потом на ваше усмотрение опять же. Можете банить, можете, сказать что я теоретик-нуб, а можете (а вдруг, чем черт не шутит) извиниться.

 
Вы забыли посмотреть с CArrayObj даже при явном моем указании на это и то, что виртуальная функция идет из базового класса CArray.

C Shutdown понятно, через несколько комментариев Вы соизволили сформулировать претензию. Она в имени. Но это не проблема и не баг.
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5