MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 936

 
Igor Makanu:

再び:コンパイルエラーが 出なかったからといって、テンプレートクラスが含まれていたとは限りません。- テンプレート宣言がありますが、そのような変数はどこにあるのでしょうか?- オブジェクト?

もし、問題を解決することが「極めて重要」であれば、完全に再現可能なコードを作ってください - 完全に、それはあなたの裁量で....コメントなしで、再び、私はマクロ置換を使用する論理を理解していない

私はマクロをほとんど使いませんが、少なくともマクロを使う場合は、それが最終的に何をもたらすかを理解しています。

確かにオブジェクトが作成されていないので、確認しました。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define  templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д


#define  Vosmas(a,b,c,d,e) /*return*/(Fun(a,b,c,d,e))//a- массив, 
                                                    //b- номер строки если нужен
                                                    //c,d- номера измерений если нужны и массив многомерный

int Mas[2],Mas2[2][2],Mas3[2][2][2];

int OnInit()
{int Perem=0;
 Perem=Vosmas(Mas,0,0,0,3);
 Print("Vosmas: ",Perem);//результат 3
return(INIT_SUCCEEDED);}

class CData{
public:CData(){};~CData(){};

       int Total(int &mas[]    ,int y1=0){return(mas[y1]);}  
       int Total(int &mas[][]  ,int y1=0/*,int y=0*/){return(mas[y1][0]);}
       int Total(int &mas[][][],int y1=0/*,int y=0,int u=0*/){return(mas[y1][0][0]);}};
       
         
templ(T) T Fun(T &a[],int b,int c,int d,int e){a[b]=e; return (a[b]);}

なぜそんなプログラミング言語が必要なのか、なぜオーバーロードもできないのにそんなクラスが必要なのか、すべてが死んでいて静的なのです。

 
mql4の開発者に手紙を書く方法 コンパイラのコードを見るには、もっと機能を追加して、静的でないようにすることができますか?
 
Seric29:

はい、その通りです、オブジェクトは作成されていません。

その結果、オーバーロードができないのはマイナスで、すべてが死んでいて静的なのに、なぜそんなプログラミング言語が必要なのか、なぜそんなクラスが必要なのか?

そうなんですか?

知らなかったんですね。

じゃあ、みんなどうやって複雑なことを書いているんだ?理解を超えている...。

 
Seric29:

マクロの仕事は、クラスから関数を呼び出して、この関数に値を渡すことですが、マクロは任意の次元の配列を取ることができるので、そのようなスキームを作ろうとしています。もちろん、石の多くが、私はクラスから関数を呼び出す必要があり、私はクラスから単純な関数を呼び出す方法がわからない(私の場合、メソッドの合計は何の説明もありません)ヘルプに書かれていない、転送に関連する複雑な例です。

マクロが任意の次元の配列を受け取る例ですが、開発者がこれらの機能を削減し、複雑な要素を扱うのが普通であることは悪いことです。

テンプレートなしでもできますが、テンプレートがあったほうがいいです。

嫌々ながらターミナルを開いてみると、これが例のもの。

#property strict
#property  show_inputs
//+------------------------------------------------------------------+
//#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+

マクロ置換をコメントアウトしたら、コードがコンパイルされたので、動作しないのですか? なぜ使われていないテンプレートなのか、なぜ言語キーワードを重複させるだけのマクロ置換なのか、3回ほど質問しました。

何が必要なのか理解できないだけでなく、コードの一部がコンパイルされないとどうすればいいのか理解できない。

HH:このテンプレートやマクロを使用して多次元配列を 作成しようとしている場合 - imhoは、動作しません、フォーラムを検索して、既製のソリューションを見つけると使用します。

ZS: 絶対あきらめる、自分には関係ない。

 
Seric29:
mql4の開発者に手紙を書く方法 コンパイラのコードを見るには、もっと機能を追加して、静的でないようにすることができますか?

ズボンを頭からかぶるような場合はダメです :)

 
Artyom Trishkin:

そうなんですか?

知らなかったんですね。

では、人はどうやって複雑なものを書いているのでしょうか。理解を超えている...。

さて、ここでどれだけ複雑に書けるかというと、動的関数で動作するためにメモリアクセスが拒否され、オーバーロードもできないので、プログラムを完成させるために1000行のコードを余分に書き、ループや変数を余分に起動しなければならず、したがってプログラムのパフォーマンスは0になってしまいます。

 
Seric29:

メモリアクセスが拒否され、ダイナミック関数は使えない、オーバーロードもできない、だからプログラムを完成させるために1000行も余計なコードを書かなければならない、余計なループや変数が発生する、だからプログラムのパフォーマンスは0になる、というのは何がそんなに難しいのか。

まあ、最初にプログラム構成が死んでたら、そう、仕方ないですね。

プログラムは一番最後に書かれています。第一に、プログラム構成への配慮です。

やり方が違う、しかも5分で終わるものに何ヶ月も喧嘩を売っているのは正直理解できない。本当に理解できない...。

 
Igor Makanu:

と思いつつも、ターミナルを開いてみると、こんな感じ。

マクロ置換をコメントアウトしたら、コードがコンパイルされたので、動かないのですか? なぜ使われていないパターンなのか、なぜ言語キーワードを重複させるだけのマクロ置換なのか、3回ほど質問しました。

何が必要なのか理解できないだけでなく、コードの一部がコンパイルされないとどうすればいいのか理解できない。

HH:このテンプレートやマクロを使用して多次元配列を 作成しようとしている場合 - imhoは、動作しません、フォーラムを検索して、既製のソリューションを見つけると使用します。

ZS: 絶対あきらめる、自分には関係ない。

ここでは、Vosmas マクロがどんな配列でも受け入れるという例を示しました。配列の唯一の解決策は、同じ次元の配列を使うことです。C++で動作する様々なポインタや参照、動的関数の話ではなく、C++で関数を出力する問題でさえ、型の指定などは静的すぎる言語です。ここでは、本当にクールなものは書けません。

 
Seric29:

ここでは、Vosmas マクロがどんな配列でも受け入れるという例を示しました。配列のための唯一の解決策は、同じ次元の配列を使用することです、私はC + +で動作するポインタと参照と動的関数のすべての種類の話をしていない、またC + +で関数を導出の問題は、型と他のナンセンスを指定して、短いあまりにも静的言語とすべて、あなたはここで本当にクールなものを書くことができません。

C++の基本を読み始める、MQLは最小限の違いしかない!

ZS: おめでとうございます!何でもできる万能マクロができましたね!配列は一番簡単に「処理」できるので、再現例です。

#property strict
#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
   
   class CA{public: int a;} A;
   class CB{public: int b;} B;
   class CC{public: int c;} C;
   class CD{public: int d;} D;
   class CE{public: int e;} E;
   Perem=Vosmas(A,B,C,D,E);     Print("Vosmas: ",Perem);//во всех случаях результат 5
   Perem=Vosmas("УРА","Я","УЧУ","MQL","4");     Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

C++の基本を読み始める、MQLは最小限の違いしかない!

ZS: おめでとうございます!あなたは何でもできる万能マクロを書きましたね。

マクロに配列を渡して、マクロの中でオーバーロード可能な関数を呼び出して結果を返すという、原始的な作業のように見えますが、マクロの中でオーバーロード可能な関数を呼び出すと、関数3という警告が投げられます。マクロでは、オーバーロード可能な関数のどれを呼び出すかを判断する基準を書く必要があり、ここでもこの確認をどう行うかと問わなければならず、一般にアイデアは失敗しています。