Скачать MetaTrader 5

А что с this?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Комбинатор
16034
Комбинатор  

Пролистал документацию -- не увидел.

____________________

Нашел. Там же, где и раньше, без описалова.


Напомню, что для классов MQL5 необходим механизм получения указателя объекта на себя, иначе не получится написать ни одной мало-мальски серьезной вещи, используя именно ООП.

Документация по MQL5: Основы языка / Типы данных / Указатели объектов
Документация по MQL5: Основы языка / Типы данных / Указатели объектов
  • www.mql5.com
Основы языка / Типы данных / Указатели объектов - Документация по MQL5
Простак
315
Простак  
TheXpert :

Пролистал документацию -- не увидел.

____________________

Нашел. Там же, где и раньше, без описалова.


Напомню, что для классов MQL5 необходим механизм получения указателя объекта на себя, иначе не получится написать ни одной мало-мальски серьезной вещи, используя именно ООП.


В завершателе есть this, и вот такой код работает, печатая во вкладке Experts "Yes" и "No":

 

class A
{
public:
  void f() { Print("Yes"); }
  void g() { Print("No");  }
  A()   { this.f(); }
  ~A() { this.g(); }
};

/******************************************************************************/
int OnInit()
{
  A a;
  return(0);
}
Комбинатор
16034
Комбинатор  
simpleton :

В завершателе есть this, и вот такой код работает, печатая во вкладке Experts "Yes" и "No":

Хорошо, задам вопрос по-другому: есть ли возможность получить указатель на уже созданный экземпляр класса?

Ilyas
1208
Ilyas  
TheXpert :

Хорошо, задам вопрос по-другому: есть ли возможность получить указатель на уже созданный экземпляр класса?


Поноценного указателя на данный момент нет - вводится.


Сейчас в можете передать объект в функцию в качестве указателя, но такой указатель будет валидным только внутри этого вызова


CObject *ExtPtr=NULL;

void func(CObject *obj)
  {
   ExtPtr=obj;
   //--- после выхода из функции func ExtPtr будет битым указателем
   //--- и доступ к нему приведёт к критической ошибке
  }

//--- передать как указатель можно так
CObject o;
func(o);
//--- или так
CObject::CObject()
  {
   func(this);
  }

Комбинатор
16034
Комбинатор  
mql5 :

Полноценного указателя на данный момент нет - вводится.

Всмысле со всеми свойствами, кроме арифметических? Радует.

Сейчас в можете передать объект в функцию в качестве указателя, но такой указатель будет валидным только внутри этого вызова

Примерно этого я и хотел, вот только время жизни указателя не катит. Совсем.

Да и хотелось бы вдобавок все-таки что-нибудь типа так:

CObject* CObject::Self()
{
   return this;
}
Понимаю, что это небезопасно, но другой альтернативы вы не оставляете -- нормальных конструкторов и перегрузки операторов нет. Т.е. умный указатель самому написать не получится. Увы.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
Ilyas
1208
Ilyas  
TheXpert :

Всмысле со всеми свойствами, кроме арифметических? Радует.

Примерно этого я и хотел, вот только время жизни указателя не катит. Совсем.

Да и хотелось бы вдобавок все-таки что-нибудь типа так:

Понимаю, что это небезопасно, но другой альтернативы вы не оставляете -- нормальных конструкторов и перегрузки операторов нет. Т.е. умный указатель самому написать не получится. Увы.


Да, арифметика указателей не планируется, всё остальное будет
Комбинатор
16034
Комбинатор  
mql5 :
Да, арифметика указателей не планируется, всё остальное будет

Спасибо, будем ждать.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий