mql5语言的特点、微妙之处以及技巧 - 页 38

 
fxsaber:

基本功能(非必需)

  • 字符串转双数
  • 字符串转整数
  • 弦乐到时间
  • 弦外之音
  • 弦外之音
  • 字符串串联
  • 读取指针(GetPointer


为什么?
 
康斯坦丁
为什么?
一切都通过适当的操作者来完成。
 
fxsaber:
一切都通过适当的操作者来完成。

我不太明白,举个例子吧
 
康斯坦丁

我不太明白,举个例子吧

关于交易、自动交易系统和交易策略测试的论坛

mql5语言的特殊性、微妙性和技巧性

fxsaber, 2017.04.26 15:16

所有标准类型都是相互匹配的
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

结果

1
1.23

 
fxsaber:



啊,这就是你的意思))既然他们有了,就让他们有吧))否则,代码会突然停止工作,就像结构一样,至少他们引入了联盟,从某种意义上说,我们可以用拐杖来搞定))。
 
fxsaber:

方便的功能(不需要)

  • 读取指针(GetPointer

而这个功能是由什么重复的?
 
Vasiliy Pushkaryov:
而这个功能是由什么重复的?
& 宗旨
 

使用联盟 而不是铸造结构

自从建立1596年以来,不同类型的结构之间的明确转换被禁止。这样一个在旧版本中有效的例子现在将无法编译。

struct struct_double
{
   double value;
}sd;

struct struct_long
{
   ulong value;
}sl;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   sl = (struct_long)sd;
}
cannot cast 'struct_double' to 'struct_long'    CastingValues.mq5       33      9

然而,现在可以在MQL中把数据组合成一个联合结构。正因为如此,使用联盟进行类型转换是可能的。

union struct_union
{
   double d_value;
   ulong  l_value;
}su;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   su.l_value = 0;
   su.d_value = 3.14159;
   printf((string)su.l_value);
}
2017.04.27 13:20:03.375 CastingValues (Si-6.17,M1)      4614256650576692846

这种结构在新的建筑中已经有了。

p.s.请要求开发人员开始修复铸造中的文档:https://www.mql5.com/ru/docs/basis/types/casting

 
瓦西里-索科洛夫

使用联盟 而不是铸造结构

关于交易、自动交易系统和策略测试的论坛

图书馆:TypeToBytes

fxsaber, 2017.04.26 10:49

可提供随机结构铸造
struct STRUCT2
{
  MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
union不允许对具有自定义构造器和/或复制操作符的结构进行铸造。
 
fxsaber:
联盟不允许对具有自定义构造器和/或复制操作符的结构进行铸造。

没有人提到用工会完全取代铸造。

p.s. 我看了你的代码。

class CASTING
  {
  public:
    template <typename T1>
    static const T Casting( const T1 &Value )
    {
  #ifdef  TYPETOBYTES_FULL_SLOW
      T Data = {0};

      const int handle = ::FileOpen("Casting.tmp", FILE_READ | FILE_WRITE | FILE_BIN);

      if (handle != INVALID_HANDLE)
      {
        ::FileWriteStruct(handle, Value);

        ::FileSeek(handle, 0, SEEK_SET);
        ::FileReadStruct(handle, Data);

        ::FileClose(handle);
      }

      return(Data);
  #else // TYPETOBYTES_FULL_SLOW
      union CAST

通过写/读二进制的任意铸造...熄灯。不要再读下去了...