Ошибки, баги, вопросы - страница 1966

 
A100:
Я имел ввиду, что удобна сама возможность выносить метод за пределы класса

Ну да, вот так мучаешься-мучаешься, а потом выясняется что надо было знать определённые секреты )

Может у них и специализация шаблонных классов тоже есть?  какими-то хитроумными способами.  А то чё-то я давно в сервис-деске прошу об этом, а они молчат. Наверно тоже есть секреты.  Колитесь )

 
Alexey Navoykov:

Может у них и специализация шаблонных классов тоже есть?

Так давно как!

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.08.16 13:19

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
        g( f ); // void(*fn)()
}

Или что-то другое имеется в виду?


ЗЫ Нашел.

 
fxsaber:

Так давно как!

Или что-то другое имеется в виду?

ЗЫ Нашел.

Не, я говорил про шаблоны классов, а не функций.

К слову, специализация шаблонов функций на самом деле ещё не реализована.  То что по вашей ссылке они почему-то назвали "специализацией" на самом деле совсем другое.  А сейчас есть возможность только перегрузки с конкретными типами.  По сути это почти то же самое, что и специализация, с той лишь разницей, что отсутствует контроль компилятора за идентичностью сигнатуры всех перегруженных функций.  А это бывает необходимо, когда функции расположены в разных местах кода.

 
A100:

Так намного удобнее.

В случае отсутствия специализаций.
 
Alexey Navoykov:

К слову, специализация шаблонов функций на самом деле ещё не реализована.  То что по вашей ссылке они почему-то назвали "специализацией" на самом деле совсем другое.  А сейчас есть возможность только перегрузки с конкретными типами.  По сути это почти то же самое, что и специализация, с той лишь разницей, что отсутствует контроль компилятора за идентичностью сигнатуры всех перегруженных функций.  А это бывает необходимо, когда функции расположены в разных местах кода.

Без примера не пойму.

 
fxsaber:

Без примера не пойму.

На самом деле я там преувеличил, сказав что "почти то же самое".  Отличия существенные, т.к. перегрузить можно только аргументы функции, а в шаблоне могут присутствовать и прочие typename, не относящиеся к аргументам. И их можно только специализировать.  Вот например шаблон без аргументов вообще:

template<typename T>
void f() { }

template<>
void f<int>() { }
 
Alexey Navoykov:
Специализация без аргументов? )) а по чем специализироваться будет?
 
Комбинатор:
Специализация без аргументов? )) а по чем специализироваться будет?
Ну это уж в теле функции решишь. А что здесь такого?  У меня очень часто возникает такая потребность.  Приходится выкручиваться через передачу фиктивного параметра, что очень костыльно.
 
Alexey Navoykov:
А что здесь такого?
Ничего, если получится это в плюсах скомпилить и запустить )
 

Сразу после обновления на build 1650, при перетаскивании из Навигатор\Избранное нескомпилированного эксперта Draw на график вместо записи MQL5    cannot open file 'Draw.ex5' -> запускается другой эксперт, а именно ExpertMACD

После завершения компиляции Draw все исправилось, но сам факт

Добавлю: Cитуация повторяющаяся - вместо любого нескомпилированного советника запускается ExpertMACD 

Причина обращения: