Имеется в виду перегрузка со ссылкой на объекты или ссылка на указатель (чего вроде не существует)? Я не в курсе, как в ссылку на объект подсунуть указатель на распределенный по new экземпляр.
со ссылкой на объекты.
у меня так:
class C {};
template<typename V>
void process(V value)
{
}
/* если добавить, компилируется
template<typename V>
void process(V& value)
{
}
*/void process(C *ptr)
{
}
voidOnStart()
{
C c;
process(&c); // pointer, ok
process(c); // 'process' - no one of the overloads can be applied to the function call test2.mq5 32 7
}
Sergey Dzyublik: Очень противный баг MT5(build 2316), блокирующий дальнейшую разработку. Создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
Убил уйму времени и сил, что бы раскопать и понять, что проблема не в коде, а в работе MQL компилятора. (С++ online: https://onlinegdb.com/H1R1fR5ML) Предположительно, проблема в работе кеша шаблонного класса "main_wrapper" при генерации кода во время компиляции, когда в качестве параметра передается internal class "internal_wrapper" от шаблонного класса "A" для различных типов данных (int, B*, B, C). Какой первый тип данных будет создан шаблонным классом "main_wrapper<A<TEMPLATE_TYPE>::internal_wrapper>, такой тип данных и будет далее использоваться во всех объектах, данного шаблона в будущем.
Другой баг с генераций кода шаблонного класса будет предоставлен ниже.
Сразу два вопроса к работе компилятора МТ5(build 2321):
1. Не соответствие приоритетов выполнения шаблонных функций в MQL в сравнении с шаблонными функциями в С++ (online: https://onlinegdb.com/Hkvz8Hu7L). Так в С++, когда все три шаблонных функции в наличии, выполняется шаблонная функция с результатом "C++:1", если ее удалить, тогда выполнятся будет "C++:2", а если ее удалить - "C++:3". В MQL же совсем другие приоритеты: "C++:2", затем "C++:1" и "C++:3".
2. Не понятно почему в MQL первая из функций запрещена, тогда как идентичная ей, но с фиктивным параметром, уже разрешена:
Имеется в виду перегрузка со ссылкой на объекты или ссылка на указатель (чего вроде не существует)? Я не в курсе, как в ссылку на объект подсунуть указатель на распределенный по new экземпляр.
со ссылкой на объекты.
у меня так:
со ссылкой на объекты.
у меня так:
Всё же не настолько прямолинейно, извиняйте ;-). Класс используется для наследования:
Если б можно было создавать BaseFunctor, он бы работал, да. Но это не тот случай.
Здравствуйте!
Спасибо за сообщение об ошибке!
Не могли бы вы подробнее описать проблему с картинкой?
На текущий момент проблемы нет
Код ниже выводит 牖漠摲牥湩潦〉〮र〲थ⸰〰㠉┰〉〮र
А должен вывести текст test
Файлы лежат в папке Files\\Test\\
Функция пишет что хендл верен он равен 1 и сразу GetLastError пишет ошибку 5008 Не верный хендл ....
Куда копать ?
Очень противный баг MT5(build 2316), блокирующий дальнейшую разработку.
Создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
Убил уйму времени и сил, что бы раскопать и понять, что проблема не в коде, а в работе MQL компилятора. (С++ online: https://onlinegdb.com/H1R1fR5ML)
Предположительно, проблема в работе кеша шаблонного класса "main_wrapper" при генерации кода во время компиляции, когда в качестве параметра передается internal class "internal_wrapper" от шаблонного класса "A" для различных типов данных (int, B*, B, C).
Какой первый тип данных будет создан шаблонным классом "main_wrapper<A<TEMPLATE_TYPE>::internal_wrapper>, такой тип данных и будет далее использоваться во всех объектах, данного шаблона в будущем.
Другой баг с генераций кода шаблонного класса будет предоставлен ниже.
Спасибо за сообщение, исправлено
Код ниже выводит 牖漠摲牥湩潦〉〮र〲थ⸰〰㠉┰〉〮र
А должен вывести текст test
Файлы лежат в папке Files\\Test\\
Функция пишет что хендл верен он равен 1 и сразу GetLastError пишет ошибку 5008 Не верный хендл ....
Куда копать ?
В какой кодировке файл?
Еще один баг MT5(build 2316) с генерацией кода шаблонного класса при использовании internal class.
С++ online: https://onlinegdb.com/HJkKXAqMU
Спасибо за сообщение, исправлено
Баг MT5(build 2340) Ошибка компиляции при попытке доступа к internal class для шаблонного параметра шаблонной функции.
Спасибо за сообщение, исправлено
В какой кодировке файл?
В стандартной UTF-8
Я пробовал по разному, с разными кодировками и с разными разделителями.
Результат либо 5008 либо иероглифы.
Сразу два вопроса к работе компилятора МТ5(build 2321):
1. Не соответствие приоритетов выполнения шаблонных функций в MQL в сравнении с шаблонными функциями в С++ (online: https://onlinegdb.com/Hkvz8Hu7L).
Так в С++, когда все три шаблонных функции в наличии, выполняется шаблонная функция с результатом "C++:1", если ее удалить, тогда выполнятся будет "C++:2", а если ее удалить - "C++:3".
В MQL же совсем другие приоритеты: "C++:2", затем "C++:1" и "C++:3".
2. Не понятно почему в MQL первая из функций запрещена, тогда как идентичная ей, но с фиктивным параметром, уже разрешена:
Спасибо за сообщение, исправлено