Баг МТ5 (build 2345), еще одно проявление ранее описанного бага, когда переданный в шаблонную функцию указатель выступает для одних операций типом данных указатель, для других - типом данных класс:
#define PRINT(x) ; Print(#x, ":", string(x))
template<typename T>
T test(T ptr){
PRINT(typename(ptr)); // A*
PRINT(typename(T)); // A*T new_ptr = new T();return (new_ptr);
}
class A{};
voidOnStart(){
A a;
test(&a); // Compile Error: OK
}
Баг МТ5 (build 2345), не выполняется проверка на наличие повторно использованных имен шаблонных типов при объявлении шаблонной функции внутри шаблонного класса, что приводит к неожидаемому поведению:
#define PRINT(x) ; Print(#x, ":", string(x))
template<typename T>class A{
public:
template<typename T>// Compile Error: OK
T test(T p){
B b = NULL;
PRINT(typename(B)); // C*
PRINT(typename(b)); // C*return b;
}
//real templatetemplate<typename TT>
TT test_real(TT p){
TT b = NULL;
PRINT(typename(TT));
PRINT(typename(b));
return b;
}
};
class B{};
class C : public B{};
voidOnStart(){
A<B> a;
B b;
C c;
C* c_ptr = a.test(&c);
}
Баг МТ5 (build 2345) в конструкторе базового класса невозможно выполнить explicit typecast по приведению указателя на объект базового класса к указателю на родительский класс.
#define PRINT(x) ; Print(#x, ":", string(x))
template<typename T>
class A{
T* virtual_call;
public:
A(T* ptr){
virtual_call = dynamic_cast<T*>(&this);
PRINT(virtual_call == NULL); // true, virtual_call == NULL
virtual_call = dynamic_cast<T*>(ptr);
PRINT(virtual_call == NULL); // false, virtual_call != NULLvirtual_call = (T*)(&this); // Execution Error: Incorrect casting of pointers.
virtual_call = (T*)(ptr); // OK
}
template<typename TT>
void test(TT n){
virtual_call.__test(n);
}
template<typename TT>
void __test(TT n){
printf("AAAA");
}
};
class B : public A<B>{
public:
B() : A(&this){}
template<typename TT>
void __test(TT n){
printf("BBBB");
}
};
class C : public A<C>{
public:
C() : A(&this){}
};
voidOnStart(){
B b;
b.test(1); // should be "BBBB"
C c;
c.test(1); // should be "AAAA"
}
Получается для реализации "патерна" по эмуляции работы виртуальных шаблонных функций необходимо тянуть в базовый класс кроме наследования типов еще и непосредственное значение указателя на родительский класс, что не есть good...
class B {};
template<typename T>
class A
{
static T *array;
staticvoid check()
{
T *ptr = array; // unresolved static variable 'A<B>::array'
}
};
class Y: public A<B>
{
};
template<typename T>
static T *A::array;
voidOnStart()
{
Y y;
}
class B {};
template<typename T>
class A
{
static T *array;
staticvoid check(){
T *ptr = array;
}
};
template<typename T>
static T *A::array;
class Y: public A<B>
{
};
voidOnStart()
{
Y y;
}
definition для static array был передвинут выше создания class Y.
А сейчас можно запускать оптимизацию+тест по всем символам в обзоре рынка? Или только без оптимизации просто прогоны с теми же параметрами делается по всему обзору?
То есть можно по символам в обзоре рынка не только с одними параметрами прогон но заодно еще оптимизация чтобы была выбрана? А то блокируются выбор параметров оптимизации когда выбран режим все символы.
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
Бывает, нужно советник прогнать на множестве символов. Для этого в MT5-тестере существует режим "Все символы, выбранные в окне Обзора рынка". Получается прогон одних и тех же настроек советника на разных символах. Но иногда требуется сделать много различных запусков MT5-тестера. Данная библиотека позволяет это. Возможности. Можно задавать...
Уже заработал вроде.
Да.
Баг МТ5 (build 2345), не выполняется проверка на наличие повторно использованных имен шаблонных типов при объявлении шаблонной функции внутри шаблонного класса, что приводит к неожидаемому поведению:
Получается для реализации "патерна" по эмуляции работы виртуальных шаблонных функций необходимо тянуть в базовый класс кроме наследования типов еще и непосредственное значение указателя на родительский класс, что не есть good...
У кого-нибудь компилируется вот это?
Что не так?
У кого-нибудь компилируется вот это?
Что не так?
Все ок, обращайтесь еще:
definition для static array был передвинут выше создания class Y.А сейчас можно запускать оптимизацию+тест по всем символам в обзоре рынка? Или только без оптимизации просто прогоны с теми же параметрами делается по всему обзору?
То есть можно по символам в обзоре рынка не только с одними параметрами прогон но заодно еще оптимизация чтобы была выбрана? А то блокируются выбор параметров оптимизации когда выбран режим все символы.
А сейчас можно запускать оптимизацию+тест по всем символам в обзоре рынка?
https://www.mql5.com/ru/code/26132
https://www.mql5.com/ru/code/26132