Ограничения typedef?

 

Начал применять в проекте указатели на функции, заодно попробовал typedef в традиционном применении и выяснил, что простейший код не компилируется. Я не понял, typedef работает только с указателями на функции?

//объявим указатель на функцию
typedef double (*PFunc)(double, double);

double Add2(double v0, double v1)
{
    return v0 + v1;
}

double Mul(double v0, double v1)
{
    return v0 * v1;
}

void TestFuncPointer()
{
    PFunc pf; 
    pf = Add2;
    double result = pf(11.25, 44.11);
    Print("PFunc Add2 pf= ", result);
    pf = Mul;
    result = pf(11.25, 44.11);
    Print("PFunc Mul pf= ", result);
}

Вышеприведенный код работает без проблем. А вот такой не компилируется. В VS2017 все компилируется без ошибок.

typedef int INT32; //'INT32' - unexpected token
//Ок, в MQL5 нет указателей на примитивные типы данных, может и с typedef такие же ограничения, проверим на классе

class ParentA
{
protected:
    int protectedA;
public:
    ParentA(){}
};

typedef ParentA pa;//error: 'pa' - unexpected token

 
Посмотрите справку и вопрос отпадет.
 
Alexey Volchanskiy:

Начал применять в проекте указатели на функции, заодно попробовал typedef в традиционном применении и выяснил, что простейший код не компилируется. Я не понял, typedef работает только с указателями на функции?

Вышеприведенный код работает без проблем. А вот такой не компилируется. В VS2017 все компилируется без ошибок.

Указатели на функции - это некошерно.

Используй силу, Люк указатели на объекты !

 
Rashid Umarov:
Посмотрите справку и вопрос отпадет.

Рашид, я не пионер юный и всегда первым делом смотрю справку и роюсь поиском по форуму. В справке написано следующее, что не соответствует действительности. Если я что-то упустил, не могли бы вы быть конкретнее и явно ткнуть носом в ошибку?

------------- из справки ------------

Пользовательские типы

Ключевое слово typedef в языке C++ позволяет создавать пользовательские типы данных – для этого достаточно определить новое имя типа данных для уже существующего типа данных. При этом сам новый тип данных не создается, а лишь определяется новое имя для уже существующего типа. Благодаря использованию пользовательских типов  можно делать программы более гибкими: для этого иногда достаточно изменить typedef-инструкции с помощью макросов подстановки (#define). Использование пользовательских типов позволяет также улучшить читабельность кода, поскольку для стандартных типов данных с помощью typedef можно использовать собственные описательные имена. Общий формат записи инструкции для создания пользовательского типа:

   typedef тип новое_имя;

Здесь элемент тип означает любой допустимый тип данных, а элемент новое_имя – новое имя для этого типа. Важно отметить, что новое имя определяется только в качестве дополнения к существующему имени типа, а не для его замены. В языке MQL5 с помощью typedef можно создавать указатели на функции.

Документация по MQL5: Основы языка / Типы данных / Пользовательские типы
Документация по MQL5: Основы языка / Типы данных / Пользовательские типы
  • www.mql5.com
//|                                                Panel_Buttons.mq5 | //|                        Copyright 2017, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| defines                                                          |  INDENT_LEFT                         (11)      ...
 
Georgiy Merts:

Указатели на функции - это некошерно.

Используй силу, Люк указатели на объекты !

Жорж, почитай, что такое событийная модель и что такое делегаты в C#. Указатели на функции в MQL4/5 работают нормально и позволяют создать НЕ-объектно-ориентированный аналог делегата.

 
Alexey Volchanskiy:

Жорж, почитай, что такое событийная модель и что такое делегаты в C#. Указатели на функции в MQL4/5 работают нормально и позволяют создать НЕ-объектно-ориентированный аналог делегата.

Так а я и не против.

Свинина - это тоже очень даже питательно. Но - не к лицу ортодоксальному старому еврею ею питаться.  :)

 
Alexey Volchanskiy:

------------- из справки ------------
Ключевое слово typedef в языке C++ позволяет ....
В языке MQL5 с помощью typedef можно создавать указатели на функции.

Зеленым по белому написано что можно делать в MQL5, зачем лезть в плюсы - не понятно.

 
Sergey Dzyublik:

Зеленым по белому написано что можно делать в MQL5, зачем лезть в плюсы - не понятно.

Запутался человек.
 
Alexey Volchanskiy:. Общий формат записи инструкции для создания пользовательского типа:

   typedef тип новое_имя;

Здесь элемент тип означает любой допустимый тип данных, а элемент новое_имя – новое имя для этого типа. Важно отметить, что новое имя определяется только в качестве дополнения к существующему имени типа, а не для его замены. В языке MQL5 с помощью typedef можно создавать указатели на функции.

Каждый видит то, что ищет. Там написано, как уже сказано выше другими в этой ветке:

В языке MQL5 с помощью typedef можно создавать указатели на функции.

 
Rashid Umarov:

Каждый видит то, что ищет. Там написано, как уже сказано выше другими в этой ветке:

Я вижу четко то, что написано в справке!  А там написано - Ключевое слово typedef в языке C++ позволяет создавать пользовательские типы данных – для этого достаточно определить новое имя типа данных для уже существующего типа данных.

А потом идет приписка про указатели на функции. Значит надо не путать людей а написать четко - В языке MQL5 с помощью typedef можно создавать исключительно указатели на функции и более ничего.

Sergey Dzyublik:

Зеленым по белому написано что можно делать в MQL5, зачем лезть в плюсы - не понятно.

Сергей, вам плохо видно на экране, что ли? Или такое желание сказать КУ-у-у?

---------------------------

Вопрос закрыт

 
Alexey Volchanskiy:

Я вижу четко то, что написано в справке!  А там написано - Ключевое слово typedef в языке C++ позволяет создавать пользовательские типы данных – для этого достаточно определить новое имя типа данных для уже существующего типа данных.

А потом идет приписка про указатели на функции. Значит надо не путать людей а написать четко - В языке MQL5 с помощью typedef можно создавать исключительно указатели на функции и более ничего.

Сергей, вам плохо видно на экране, что ли? Или такое желание сказать КУ-у-у?

---------------------------

Вопрос закрыт

Вы не то выделяете упорно.  Так что Сергей прав. Действительно вопрос закрыт

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