错误、漏洞、问题 - 页 2670

 

测试员错误(也许我已经不明白了)。

测试器中缺少利润交易

 

又遇到了之前描述的bug--"未定义行为,你创建了一个内部类型为 "C "的复杂包装对象,几次后发现它是一个完全不同的数据类型,可能是 "B",可能是 "int",随你怎么想......"。
事实上,它花了一天时间进行本地化、复制和寻找解决方法,不幸的是,所有这些都无济于事。
之前建议的 使用虚构的模板参数的解决方法,在下面的例子中被证明是无用的。

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};

template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // int
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

我设法使用 "自制 "的自动类型得到了唯一可行的解决方案,但我得到了巨大的编译成本,而真正的代码的速度却没有任何收益。
请帮助,也许有人知道如何解决这个问题。

 
Alexey Klenov:

测试员错误(也许我已经不明白了)。

由于结构上的原因,视频展示台并不总是显示当前状态。

 
fxsaber:

由于建筑方面的原因,视频展示台并不总是显示实际情况。

谢谢你,我会记住的。
 

模板函数/类缓存中的缺陷:
MT5(build 2361)未修复)。*** (up) 未定义行为,你创建了一个内部类型为 "C "的复杂包装对象,几次后发现它是相当不同的数据类型,也许是 "B",也许是 "int",随你怎么想。
(MT5(build 2361)没有修复)* 编译错误,传递函数指针作为const ref模板参数的错误。
(MT5(build 2361)没有修复)* 编译错误,B<int>对象可以在B<void*>类对象之后创建,但如果在之前做,就会发生编译错误。


模板功能/类工作中的缺陷:
MT5(build 2361)未修复)。*** (up) 编译错误,模板函数内的错误,在明确的类型转换 操作内传递的指针表现得像一个类,否则。
(MT5(build 2361)没有修复)** 编译错误,使用内部类时模板类代码生成的错误。
(MT5(build 2361)中未修复)** 编译错误,在试图为模板函数的模板参数访问内部类时出现错误。
(MT5(build 2361)没有修复)** 编译错误,模板方法/类的生成错误,模板参数的 "自动替换 "过程超出范围进入主程序代码。
(MT5(build 2361)没有修复)* 编译错误,当模板类作为模板方法的返回值时,模板类代码生成丢失的错误。
(MT5(build 2361)没有修复)* 编译错误,当内部结构被传递到模板函数时,产生的数据类型 不能作为模板类中另一个内部结构的基础数据类型的错误。
(MT5(build 2361)没有修复)* 编译错误,当从超载的非模板函数中调用具有明确参数类型的模板函数时出现错误。

(被MT5(build 2361)修复) 编译错误,内部类定义的错误--在指定基类时没有引用全局命名空间
(MT5(build 2361)没有修复
)***(新)编译错误,主要诉求是不适当的输出警告--"已废弃的行为,隐藏的方法调用将在未来的MQL编译器版本中被禁用"。目前的实现是在麻雀身上放 炮。
(
MT5(build 2361)没有修复)**(新)编译错误,该错误涉及模板函数的返回值,当返回值是一个模板类内部的类,其参数类型由模板函数的参数类型定义。
(
MT5(build 2361)没有修复)*(新)编译错误,在模板类内声明模板函数时,没有对重复使用的模板类型名称进行检查,这导致了意外行为
(
MT5(build 2361)没有修复)* (new) Runtimer错误,在基类构造函数中,不可能对基类对象的指针到父类的指针进行显式类型转换。
(
被MT5(build 2361)修复)(new) 编译错误,当模板类/结构是一个对象时,与返回 "原地创建 "对象有关的多个缺陷


与MQL与C++中的重载函数的调用优先级不匹配有关的缺陷。
( MT5(build 2361)没有修复)*** 当有类A <= B <= C <= D的继承,并且实现了两个重载函数,例如,一个有参数A*,第二个有参数B*,那么在MQL中传递这样的函数一个对象C*或D*会导致编译错误 "对重载函数的模糊调用"。
( MT5(build 2361)没有修复)** 运行时,调用超载模板函数的优先级不匹配。
(未 被MT5(build 2361)修复) ** 编译错误,调用重载模板函数的优先级实际上取决于模板参数的类型,理论上这不应该影响编译的结果。
( MT5(build 2361)没有修复)** 在模板函数的代码生成时发生编译错误,尽管事实上有一个重载的模板函数,其签名与所传递的参数相匹配。


与函数的缓慢执行有关的缺陷,代码优化器的工作。
( MT5(build 2361)没有修复)** (new) 运行时,当使用ArrayResize一次向数组中添加一个元素时,尽管已经提前为它们预留了内存,但仍有很大的开销,例如,结构的速度最多可以慢7倍。


建议。
link- 关于允许字面意义和临时变量作为const ref函数参数传递。
link- 当在 "项目 "选项卡中移动 项目文件 时,对于已经打开并在ME选项卡中的移动文件,要自动更新其位置路径。
link- 在MQL中引入typedef声明功能。
链接- 关于提供强制生成默认复制构造函数和赋值运算符的可能性。

 
fxsaber:

由于结构上的原因,可视化器并不总是显示当前状态。

阿列克谢-克列诺夫
谢谢,我会记住的。

暂停后运行几下(F12)就能治愈。

 
Andrey Khatimlianskii:

暂停后运行几下(F12)就能治愈。

谢谢你。我会试一试的。

 
Sergey Dzyublik:

又遇到了之前描述的bug--"未定义行为,你创建了一个内部类型为 "C "的复杂包装对象,几次后发现它是一个完全不同的数据类型,可能是 "B",可能是 "int",随你怎么想......"。
事实上,它花了一天时间进行本地化、复制和寻找解决方法,不幸的是,所有这些都无济于事。

最后我设法找到了一个可以接受的解决方案。
事实证明,使用静态类成员提供了一个绕过上述错误的方法。

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

我怎样才能解决这个存储错误?


渐渐地,它拒绝保存越来越多的文件。很快,所有储存的东西都将无法更新。

 

买入止损单和卖出止损单的工具提示中的利润/亏损计算不正确。

当把鼠标悬停在tp上时

当把鼠标悬停在Sl