Новая версия платформы MetaTrader 5 build 5320: сервисы в Библиотеке кодов и удобная работа с input в MQL5 - страница 10

 
Edgar Akhmadeev #:
Давно уже разрабы отвечали, что это секрет.
Спасибо!
Если давно отвечали, то я и не могу этого знать, я совсем юный ещё.
 
Maxim Kuznetsov #:

встроенные функции НЕЛЬЗЯ использовать по указателю ?

Да, было и остается такое ограничение.

 
Stanislav Korotky #:

Да, было и остается такое ограничение.

печаль :-(

пришлось намонстролыжить макрос которым можно детей пугать

// make intermediate function with prefix _ , and pack it into functor
#define MATHFUNC(name) double _Math##name(double x) { return Math##name(x); }; \
   MathFunc1<double,double> name("" #name "",_Math##name);
 

вот ещё мешочек забавных ошибок :

class Foo {
public:
   int m_data;
public:
   Foo():m_data(0) {
   }
   Foo(int val):m_data(val) {
   }
   Foo(const Foo &other):m_data(other.m_data) {
   }
   
   int printInt() {
      Print(m_data);
      return 0;
   }   
   void printVoid() {
      Print(m_data);
   }
};

Foo Bar() {
   return Foo();
}
void OnStart()
{
   //Foo().printInt();     // error: cannot resolve function call Foo()
   //Foo().printVoid();    // error: cannot resolve function call Foo()
   (Foo().printInt());     // ok
   (Foo().printVoid());    // ok
   
   0+Foo().printInt();     // warning: result of expr.not used
   (int)Foo().printInt();  // ok
   //(void)Foo().printVoid();  // illegal use of 'void' type
   
   Bar().printInt();       // ok
   Bar().printVoid();      // ok
}

компилятор не может найти прямо указанный класс ?

не может выбрать так-же прямо указанный единственный метод ?

:-) 

 
Maxim Kuznetsov #:

компилятор не может найти прямо указанный класс ?

не может выбрать так-же прямо указанный единственный метод ?

(Foo()).printInt();

Ну и вызов через Bar (использование двух конструкторов), наверное, не требует скобок, т.к. функция возвращает что-то явное, а вот конструктор - нет.

 
fxsaber # :

Ну и вызов через Bar (использование двух конструкторов), наверное, не требует скобок, т.к. функция возвращает что-то явное, а вот конструктор - нет.

Это ошибка.
 
fxsaber #:

Ну и вызов через Bar (использование двух конструкторов), наверное, не требует скобок, т.к. функция возвращает что-то явное, а вот конструктор - нет.

в плюсах всё ок...

#include <iostream>
using namespace std;
class Foo {
public:
    Foo() {
    }
    Foo(const Foo &other) {
    }
    ~Foo() {
    }
    int printInt() {
        cout<<"printInt"<<endl;
        return 0;
    }
    void printVoid() {
        cout<<"printVoid"<<endl;
    }
};
int main() {
    Foo().printVoid();
    return 0;
}

конструктор как и положено возвращает объект

в MQL просто компилятор заблудился в трёх соснах

 
Maxim Kuznetsov #:

в плюсах всё ок...

Знаю только MQL5.

конструктор как и положено возвращает объект

Это, скорее, терминология. Для меня он создает объект.

в MQL просто компилятор заблудился в трёх соснах

Не знаю причин написания столь кривых сосен в виде одноразовых объектов. На MQL5 таких конструкций не встречал и нормально.