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

 
Stanislav Korotky:

У меня остается мусор на примере работы с зипами:

Прикрутил к своему скрипту - то же самое - похоже в zip-библиотеке.

PS. Выяснил, что это в Dictionary.mqh

Там шаблонный стиль кода. Это значит, что я просто не нарывался на проблемы из-за того, что использовал только часть функционала.

 

почему не могу такой шаблон сделать?

struct A
  {
   int               i;
   double            d;
  };

template<typename T>
T f(int value)
  {
   T result;
   return(result);
  }
//+------------------------------------------------------------------+
void OnStart()
  {
   A a;
   int i = 1;
   a = f(i);
  }
//+------------------------------------------------------------------+

template mismatch

'f' - cannot to apply template

   see declaration of 'f'

'f' - parameter passed as reference, variable expected

'f' - parameter passed as reference, variable expected

 

Что-то совсем замучился с хранилищем. Некоторые файлы нормально отправляет в хранилище, а некоторые ни в какую:

И, главное, нет mql5.storage-файла в папке \MQL5\ чтобы его удалить


Где он теперь?

 
Igor Makanu:

почему не могу такой шаблон сделать?

Потому что, похоже, совсем неправильно представляете работу шаблонов.

   a.i = f<int>(i);

"Чуда", что хотели, не будет.

 
Igor Makanu:

почему не могу такой шаблон сделать?

потому что шаблон выводит типы только по параметрам, но не по выходному значению.

 
fxsaber:

Потому что, похоже, совсем неправильно представляете работу шаблонов.

"Чуда", что хотели, не будет.

как компилятор преобразует шаблоны я представляю, ничего нового, так же работает?

struct A
  {
   int               i;
   double            d;
  };

template<typename T>
void f(int value,T &result)
  {
   T tmp;
   result = tmp;
  }
//+------------------------------------------------------------------+
void OnStart()
  {
   A a;
   int i = 1;
   f(i,a);
  }
//+------------------------------------------------------------------+
Andrei Trukhanovich:

потому что шаблон выводит типы только по параметрам, но не по выходному значению.

понятно, была надежда, что что-то я не учел

ладно не критично, работать будет через параметры

 
Andrei Trukhanovich :

потому что шаблон выводит типы только по параметрам, но не по выходному значению.

Это не точно.

struct A
  {
   int               i;
   double            d;
  };

template<typename T>
T f(int value)
  {
   T result={0};
   return(result);
  }
//+------------------------------------------------------------------+
void OnStart()
  {
   A a;
   int i = 1;
   a = f<A>(i);
  }
 
Alain Verleyen:

Это не точно.

Спасибо!

Да, будет работать, в синтаксисе запутался

ЗЫ: все как задумано теперь работает:

struct A
  {
   long              l;
   uint              ui;
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   A a;
   uchar u_arr[];
   string result = "";
   a.l  = 0xFFFFFFFFFFFFFFFF;
   a.ui = 0x0000;
//--- проверка работоспособности вывода
   StructToCharArray(a, u_arr);
   for(int i = 0; i < ArraySize(u_arr); i++)
     {
      result += StringFormat("%x", u_arr[i]);
     }
   printf("result = %s", result);   // result = ffffffffffffffff0000

//----  
   string s = StructEncodeBase64(a);
   Print(s);
   A b;
   b = StructDecodeBase64<A>(s);

   StructToCharArray(b, u_arr);
   result="";
   for(int i = 0; i < ArraySize(u_arr); i++)
     {
      result += StringFormat("%x", u_arr[i]);
     }
    printf("result = %s", result);

  }
//+------------------------------------------------------------------+
template<typename T>
string StructEncodeBase64(T &s_value)
  {
   const uchar key[1] = {0};
   uchar data[], result[];
   StructToCharArray(s_value, data);
   CryptEncode(CRYPT_BASE64, data, key, result);
   return(CharArrayToString(result));
  }
//+------------------------------------------------------------------+
template<typename T>
T StructDecodeBase64(string value)
  {
   const uchar key[1] = {0};
   uchar data[], decode[];
   T result;
   StringToCharArray(value, data, 0, StringLen(value));
   CryptDecode(CRYPT_BASE64, data, key, decode);
   CharArrayToStruct(result, decode);
   return(result);
  }
сериализация POD-структур в Base64
 
Alain Verleyen:

Это не точно.

Нет, это точно. Вы отметили явное задание типов параметров шаблона у функции, а я говорил про выведение, про явное задание fxsaber ответил до меня. и до вас

 
Andrei Trukhanovich :

Нет, это точно. Вы отметили явное задание типов параметров шаблона у функции, а я говорил про выведение , про явное задание fxsaber ответил до меня. и до вас

Языковая проблема.