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

 
Alexey Navoykov:
Я кстати на днях отправил им предложение насчёт введения указателей на любые типы данных.  А это это нелепое ограничение уже достало.
было бы неплохо ввести перегрузку оператора *, а то без него не получается реализовать идентичность с STL, так же неплохо бы ввести typedef в полной мере, а не только на calback`и
 
coderex:
было бы неплохо ввести перегрузку оператора *, а то без него не получается реализовать идентичность с STL, так же неплохо бы ввести typedef в полной мере, а не только на calback`и
Да, согласен. Всё в каком-то недоделанном состоянии.  А в плане перегрузок меня больше оператор приведения интересует, без него вообще тяжко.
 
coderex:
какой пример нужен?
Того, что Вам хочется из * и &. Что-нибудь простое, но наглядное. Чтобы видеть удобство.
 
fxsaber:
Того, что Вам хочется из * и &. Что-нибудь простое, но наглядное. Чтобы видеть удобство.

Того что мне хочется я уже написал выше.

Пример с оператором '&' можете сами придумать, где используете GetPointer(...), это по сути краткая форма

Пример с оператором '*' - не знаю поможет вам или нет в понимании:

class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
  
   int _val = **_it;
//---
   return 0;
}


это работает в С++, но в MQL придется делать гетер на получение m_value.

 

Добавьте в Справку, что для перерисовывания OBJ_CHART ChartRedraw(MainChartID) не подходит. Нужен ChartRedraw(ObjChartID).

Поэтому пример из Справки некорректен. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Прошу не ограничивать масштаб N <= 5 (размер области под бар = 2^N).

Это нужно (и стало целесообразно), чтобы можно было разглядывать тиковую историю подробнее.

 
Прошу пояснить. Скрипт
class A
{
public:
  const int a;
  
  A( int c = 0 ) : a(c) {}
  
  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};

class B : public A
{
public:
  const int b;
  
  B( int c = 0 ) : A(c), b(this.f()){}

  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};


void OnStart()
{
  B b;  
  A* a = new B;
  
  delete a;
}

Результат

2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f
2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f

По какой причине выдает B::F, а не A::f? Срипт написан так, что вызов f происходит ДО выполнения тела конструктора (жирным выделил). Но к этому моменту уже вызван конструктор базового класса A. Поэтому this.f(), вроде, должен относиться именно к базовому классу, пока еще не выполнился B-конструктор. Прошу пояснить, в чем ошибка в рассуждениях/преставлениях.

 
Или еще проще ситуация
class A
{
  const int a;
  
  A() : a(this.f()) {}
  
  int f() { return(0); }
};
Почему это, вообще, компилируется? this используется еще ДО вызова тела конструктора.
 
fxsaber:
Или еще проще ситуация
class A
{
  const int a;
  
  A() : a(this.f()) {}
  
  int f() { return(0); }
};
Почему это, вообще, компилируется? this используется еще ДО вызова тела конструктора.
Почему список инициализации Вы не включаете в тело? Образно говоря, объект класса (в том числе его this) инициализируется  на знаке ':'
 

Ilyas:
Почему список инициализации Вы не включаете в тело?

Потому что const int a; Иначе же нельзя?

Образно говоря, объект класса (в том числе его this) инициализируется  на знаке ':'

Понял.