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

 
A100:

У Вас - синтаксически обоснованная ошибка - приведите пример рабочего кода с (typename) в скобках. С таким же успехом можно и (OnStart) в скобках написать было

Ну вот так, нет же синтаксической ошибки

typename(J)

А вот так, уже считать за синт ошибку?

(typename)J

Когда по идее тут работает принцип преобразование типа, и справка допускает оба варианта.

 
Roman:

Ну вот так, нет же синтаксической ошибки

А вот так, уже считать за синт ошибку?

Когда по идее тут работает принцип преобразование типа, и справка допускает оба варианта.

template<typename T>

typename - это не тип, это ключевое слово. В данном случае тип - это T. Приведение идет к типу, а не к ключевому слову

Философское обоснование - здесь не подходит. Хотя, если бы MQL был бы абстрактным языком, то наверное и к ключевому слову можно было сделать приведение и он переместился бы в рейтинге сразу на 1ое место

 
A100:

typename - это не тип, это ключевое слово. В данном случае тип - это T. Приведение идет к типу, а не к ключевому слову

Философское обоснование - здесь не подходит. Хотя, если бы MQL был бы абстрактным языком, то наверное и к ключевому слову можно было сделать приведение и он переместился бы в рейтинге сразу на 1ое место

Я понимаю что typename это не тип.
Но в данном случае, мы получаем преобразование.
Из константы, получаем её тип.
Может это не правильная запись по синтаксису? Но она работает.

#define  A '+'

typename(A)
 
Roman:

Я понимаю что typename это не тип.
Но в данном случае, мы получаем преобразование.
Из константы, получаем её тип.
Может это не правильная запись по синтаксису? Но она работает.

Она работает, но не так как Вы себе это представляете. Вы получаете не тип, а string. Хотел это на примере показать, но получил ошибку ниже

Но это не значит, что Вы правы - просто очередная ошибка компилятора случайно всплыла

 
Ошибка при компиляции:
void OnStart()
{
    Print(typename("ushort"));      //(1) нормально
    Print(typename(typename('+'))); //(2) Error: 'typename' - unexpected token
}

А какая разница между (1) и (2) ? Уважаемые разработчики - может быть  Roman прав и теперь typename возвращает тип?

Ожидался результат: string

 
A100:

Она работает, но не так как Вы себе это представляете. Вы получаете не тип, а string. Хотел это на примере показать, но получил ошибку:

Как это не тип?
Как раз получаю тип, а не string.
ushort это не string.

#define  A '+'

void OnStart()
{
   Print(typename(A));
   Print(typename("string"));
}
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  ushort
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  string
 
Roman:

Как это не тип?
Как раз получаю тип, а не string.
ushort это не string.

Вы получаете не ushort, а "ushort". Разница понятна? Если нет, то читаем документацию до понимания

Хотя получить в результате реальный ushort было бы круто!

 
A100:

Вы получаете не ushort, а "ushort". Разница понятна? Если нет, то читаем документацию до понимания

Так это уже Print() выводит на печать как "ushort" строковым литералом.
При чём тут это? Сам факт, что typename возвращает имя типа!

 
Roman:

Так это уже Print() выводит на печать как "ushort" строковым литералом.
При чём тут это? Сам факт, что typename возвращает имя типа!

Документацию по ссылке прочли? Там и пример есть соответствующий. К сожалению мой пример не удался

 
A100:

Документацию по ссылке прочли?

Причём тут шаблоны?
Если синтаксис использования не для шаблона, в даном случае.

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