Ошибки, баги, вопросы - страница 2661
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу прощение, что упростил код до минимального, вводя этим определенные неточности, в частности:
- передаваемые в функцию объекты имеют одинаковый размер (код обновлен);
- вместо тупого вывода printf("1");/printf("2"); в действительности выполняется доступ к интерфейсу или к внутренностям объекта напрямую, это в свою очередь не дает возможность инлайнить два алгоритма в единую функцию вызова (код обновлен).
Прошу прощение, что упростил код до минимального, вводя этим определенные неточности, в частности:
- передаваемые в функцию объекты имеют одинаковый размер (код обновлен);
- вместо тупого вывода printf("1");/printf("2"); в действительности выполняется доступ к интерфейсу или к внутренностям объекта напрямую, это в свою очередь не дает возможность инлайнить два алгоритма в единую функцию вызова (код обновлен).
ну или так:
он не идеальный, так как требует изменений в структуре используемых объектов и размазывает логику, зато работает.
И да, лучше сделать функцию-обертку над test:
Чем искать по проекту все вызовы:
В любом случае - спасибо большое за помощь.
Спасибо за вариант решения,
он не идеальный, так как требует изменений в структуре используемых объектов и размазывает логику, зато работает.
И да, лучше сделать функцию-обертку над test:
Чем искать по проекту все вызовы:
В любом случае - спасибо большое за помощь.
да, согласен
Дефекты в работе кеша шаблонной функции/класса:
(не исправлено MT5(build 2345)) ** Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
(не исправлено MT5(build 2345)) * Compile Error, баг при передаче в качестве const ref template аргумента указателя на функцию.
(не исправлено MT5(build 2345)) * Compile Error, объект B<int> можно создать после объекта класса B<void*>, но если сделать это перед, то возникает ошибка компиляции.
Дефекты в работе шаблонной функции/класса:
(не исправлено MT5(build 2345)) ** Compile Error, баг внутри шаблонной функции, переданный указатель в рамках операции явного приведения типа ведет себя как класс в остальных случаях - как указатель.
(не исправлено MT5(build 2345)) ** Compile Error, баг с генерацией кода шаблонного класса при использовании internal class.
(не исправлено MT5(build 2345)) ** Compile Error, баг при попытке доступа к internal class для шаблонного параметра шаблонной функции.
(не исправлено MT5(build 2345)) * Compile Error, баг при генерации шаблонного метода/класса, процесс "автозаменны" шаблонного параметра выходит за пределы скоупа в основной код программы.
(не исправлено MT5(build 2345)) * Compile Error, баг с отсутствием автоматической генерации кода шаблонного класса, когда шаблонный класс выступает в качестве return value для шаблонного метода.
(не исправлено MT5(build 2345)) * Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса.
(не исправлено MT5(build 2345)) *(new) Compile Error, баг при передаче internal struct в шаблонную функцию, полученный тип данных невозможно использовать как базовый тип данных для другой internal struct в шаблонном классе.
(не исправлено MT5(build 2345)) *(new) Compile Error, баг при вызове шаблонной функции с явным указанием типов аргументов, когда вызов выполняется из перегруженной нешаблонной функции.
Дефекты в рамках несоответствие приоритетов вызовов перегруженных функций в MQL в сравнении с С++:
(не исправлено MT5(build 2345)) *** Compile Error, когда есть наследование классов A <= B <= C <= D и реализованы две overloading функции, например одна c параметра А*, а вторая с B*, то передача в такую функцию объекта C* или D* в MQL вызывает ошибку компиляции "ambiguous call to overloaded function".
(не исправлено MT5(build 2345)) ** Runtime, Несоответствие приоритетов для вызовов перегруженных шаблонных функций.
(не исправлено MT5(build 2345)) **(new) Compile Error, приоритет вызовов перегруженных шаблонных функций в действительности зависит от типа шаблонного параметра, который, в теории ни как не должен влиять на результат компиляции.
(не исправлено MT5(build 2345)) **(new) Compile Error, при генерации кода шаблонной функции возникает ошибка компиляции несмотря на то, что имеется перегруженная шаблонная функция с подходящей сигнатурой для передаваемых параметров.
Предложения:
ссылка - о предоставлении возможности передавать литералы и временные переменные в виде const ref аргументов функции.
ссылка - при перемещении файлов проекта во вкладке "Project", для перемещаемых файлов, которые открыты и находятся во вкладках ME, автоматически обновлять их путь расположения.
ссылка - о необходимости введения в MQL typedef declaration функциональности.
ссылка - о предоставлении возможности принудительной генерации дефолтных конструкторов копирования и операторов присвоения.
Sergey Dzyublik:
Спасибо за вариант решения
по ссылке передается временная копия, так поменять структуру не получится
по ссылке передается временная копия, так поменять структуру не получится
В общем случаи вы правы...
Но в частном - там все на много сложнее, и в действительности приведенные структуры - это указатели итераторы и изменяется не их содержимое, а объекты, на которые они ссылаются.
Так что в частном случаи проблема решена, за что и выражена благодарность.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Sergey Dzyublik, 2020.03.01 12:53
Правильно ли понимаю, что эта функция будет возвращать указатель на несуществующий объект?
Правильно ли понимаю, что эта функция будет возвращать указатель на несуществующий объект?
Да, в приведенном примере функция будет возвращать указатель на несуществующий объект.
Основная цель данного кода - это показать наличие рабочей функциональности для простого класса и в то же время фактическое ее отсутствие для шаблонного.