エラー、バグ、質問 - ページ 2474

 
fxsaber:

テンプレートとvoid*の使い分けは?

特別なやり方があるわけではなく、あくまで直感です

 
残念ながら、現時点ではMT4/MT5のファンクションポインタの種類は非常に限られており、いくつかの不具合があるため実用に耐えるものではありません。
#(MT5(build 2060)では修正されていません)"typedef 内で同じ関数シグネチャを繰り返し使用するとコンパイルエラーに なる".
#(MT5(build 2060)では修正されていません)"typedef で作業する場合、明示的に特殊化されたテンプレート関数を使用すると、そのテンプレート関数用のコードが生成されない".


懸案の名前空間の実装を考慮し、次期C++の 不具合修正の一環として、この動作の サポートを実装することをご検討ください。
//#include <iostream>

template<typename T>
class A{
public:
    typedef void (*callback)(T&);   //class namespace for function pointer type
    callback f_ptr;
    T data;
};

template<typename T>
class B{
public:
    typedef void (*callback)(T&);   //class namespace for function pointer type
    callback f_ptr;
};

template<typename T>
void func(T& value){
    ++value;
}


void OnStart(){
//int main(){
    A<int> a;
    B<int> b;
    
    a.f_ptr = func<int>;      // automatic code generation of templates functions
    b.f_ptr = a.f_ptr;        // assignment operation for function pointers with the same function signatures and different function pointer types.
    
    int x = 1;
    b.f_ptr(x);
    printf("%d\r\n", x);                  //2
    printf("%d\r\n", b.f_ptr == a.f_ptr); //1     // equal operation for function pointers with the same function signatures and different function pointer types.
}
 

こんにちは!トピックにご注目ください

https://www.mql5.com/ru/forum/314275

簡単に言うと、テスターがシンボル設定で設定されたマージンと一致しないマージンを計算すること
[bug] Неправильная Margin при тестировании на custom symbol
[bug] Неправильная Margin при тестировании на custom symbol
  • 2019.05.25
  • www.mql5.com
Привет! Создал кастомный символ с параметрами, скопированными из реального Si-3.19. См. скриншоты. Загрузил для него историю...
 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MetaTrader 4 build 1170 プラットフォームの新バージョン

fxsaber, 2019.05.28 12:10

MT4コンパイラのバグでしょうか?
#property strict

void Func( int &[] ) {}
void Func( int &[][2] ) {} // 'Func' - function already defined and has body

void OnStart()
{
  int Array1[];
  int Array2[][2];
  
  Func(Array1);
  Func(Array2); // 'Array2' - invalid array access
}


MT5では問題ありません。MT4では、関数をオーバーロードする方法はありません。

 

MT 4でMT 5のわずかな誤動作が確認できない・・・。


 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MetaTrader 4 build 1170 プラットフォームの新バージョン

fxsaber, 2019.05.28 14:24

MT4とMT5の見慣れない違いをキャッチした。MT4のバグでしょうか?
#property strict

bool Print2( const string Str )
{
  Print(Str);
  
  return(true);
}

void Func()
{
  static bool b = Print2(__FUNCSIG__); // MT4 - вызывается, MT5 - нет.
}

void OnStart() {}
 
fxsaber:

ファイブはスタティックの初期化を適切に行った。初回アクセス時。

4人はそうじゃなかった。そして、いつそうなるかはわからない。

 

build 2062: カスタムシンボルの作成時にエラー5305が発生する。

2060年には、すべてがうまくいっている。

MT4ではコマンドラインキー/skipupdateがあったように記憶しています。

MT5でも同じようなものがあるのでしょうか?アップデートを無効にするにはどうすればよいですか?

 

fxsaber:

MT4は呼び出され、MT5は呼び出されない。

古いコンパイラでコンパイルしているようですが、最新のコンパイラ(MT5に含まれています)でコンパイルすれば、すべてうまくいきます。
 
Alexey Navoykov:
古いコンパイラでコンパイルしているようです。 最新のコンパイラ(MT5に付属)でコンパイルすれば、すべてうまくいきます。

1966年まで編集。MT4で2062を試したところ、正常に動作しました。ありがとうございました。

これに勝る ものはないのが残念です。