MQL5におけるOOPに関する質問 - ページ 61

 
Alexey Navoykov:
一方、シリアライゼーションでは、テキストフィールド名を明示的に指定した方が、保存されたファイルが動作しなくなる心配がなく、コード内で自由に名前を変更することができるだろう。

ワークアラウンドの構造について聞いているのであって、実装自体は大した問題ではない )))

jsonは各クラスのメソッドにするのか、静的なクラスにするのか、それとも一般的にテキストの形でクラスのフィールドを複製するのか......問題は、フィールドに名前を付けることではなく、その後にどうするかということです。

;)


ZSです。

MQLからC++で一般的なコードをそのまま移植したんだ!!」と、確立された自慢話を思いついた。"

もちろん、これは必要なことですが、このようなコード構造の開発に費やす時間という点では、かなりコストがかかりますし、新しい希望に応じたコードサポートも必要になるでしょう。

接続の唯一の利点 C + +(++ MQLの )明確ではない、構文構成は90%同じですが、なぜ重複?プロジェクトを 書きながらIDEで制御の拡張構文とコンパイラの可能性とイモ興味深い他の言語 - それは、少なくとも高速で快適ですが、パブリックドメイン、同じC#とPythonで準備開発は言うまでもありません。

 
Igor Makanu:

C++バンドル(+++ MQL)の優位性だけが明確でない

C++にはもっと多くの可能性があります。さらに10億通りのライブラリーがある。

 
Koldun Zloy:

C++はさらに多くの機能を備えています。さらに10億通りのライブラリーがある。

まがうかたなく

しかし、どんなに頑張っても、MQLでどんなCのヘッダーファイルでも開いて、100万個のライブラリを接続するための既製のC++ソリューションを使うことはできないだろう

今年の初めにググって、C++ APIを持つMQLにTensorFlowを接続することを試みました。

 
Igor Makanu:

紛れもなく

しかし、どんなに頑張っても、どんなCのヘッダーファイルでも、MQLで開いて、C++からの既製のソリューションを使って、100万個のライブラリを接続することはできないのです

今年の初めにググって、TensorFlowとC++ APIを持つMQLを接続しようとした - viperを書く必要がある。

C++とMQLのペアリングについてご質問いただきました。DLLでC++が使われているのは理解できた。それ以外にはないでしょう?

 
Koldun Zloy:

C++とMQLの関連性についてお聞きしました。DLLにC++が使われていることは理解した。それ以外にはないでしょう?

私はhttps://www.mql5.com/ru/forum/307970/page10#comment_11652222 に尋ねた。

然らばヘッダーファイルc_api.h(添付してあります)をMQLで開いて、TensorFlowのドキュメントを使えるようにする裏ワザ

この場合、VSでヘッダーファイルを開き、コール、モデル、内部状態などをラップしていきます。...を.dllに取り込むと、MQLで使用することができます。


手間ひまかかる


イゴール・マカヌ

というわけで、回避策の構造を聞いているのであって、実装そのものは後回しです )))

MQLのツールを使ってjsonで単純な構造をシリアライズするのが現実的かもしれないhttps://habr.com/ru/post/311262/

せめてウェブで公開されている資料があれば心強いのですが

ファイル:
c_api.zip  17 kb
 
Igor Makanu:

うんうん...もう一度聞いてみます。

助けて!例題が欲しい! お願いします。

あくまで、膝の上で考えたことを書いたものです。

#define  COMMA (text==NULL?NULL:",\n")
#define  PUSH(dVal) Push(#dVal,dVal)

class CJSon{
   string text;
public:
   CJSon():text(NULL){}
   CJSon* Push(string key,string value) {text+=COMMA+"\""+key+"\":\""+value+"\""; return &this;}
   CJSon* Push(string key,long value)   {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   CJSon* Push(string key,double value) {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   string Finish()   {return text="{\n"+text+"\n}";}
};

#undef  COMMA

void OnStart(){
   int a=56;
   double b=0.369;
   string text="Example";
   string json=(CJSon()).PUSH(a).PUSH(b).PUSH(text).Finish();
   Print(json);
 } 
 
Vladimir Simakov:

土下座して書いた、考えるだけ。

ありがとうございます、でもうまくいきません((

//+------------------------------------------------------------------+
static string _json;
template<typename T>class CJSon{
#define  COMMA (_json==NULL?NULL:",\n")
#define  PUSH(dVal) Push(#dVal,dVal)
public:
   CJSon() {_json = "";}
   CJSon* Push(string key,string value) {_json+=COMMA+"\""+key+"\":\""+value+"\""; return &this;}
   CJSon* Push(string key,long value)   {_json+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   CJSon* Push(string key,double value) {_json+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   static string Finish()   {return _json="{\n"+_json+"\n}";}
};
//+------------------------------------------------------------------+
class A
{
   public:
   static long a1;
};
long A::a1;
//+------------------------------------------------------------------+
void OnStart()
{
   CJSon<A> a;
   A::a1 = 10;
   
   a.PUSH(A::a1);
   string s = a.Finish() ;
   
   PRINT(s);
}
//+------------------------------------------------------------------+

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) s = {.

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) ,

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) "A::a1":10

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) }.

その上、静的なものしか扱えません。

文字列をdefineで1つのメソッドに集めるのはそれほど難しくないが、一般的には、考える必要がある

 
Igor Makanu:

以下、https://www.mql5.com/ru/forum/307970/page10#comment_11652222

然らばヘッダーファイルc_api.hをMQLで開き、TensorFlowのドキュメントを利用するための仕掛け

この場合、VSでヘッダーファイルを開き、コール、モデル、内部状態などをラップしていきます。...を.dllに取り込むと、MQLで使用することができます。


何しろ時間がかかる

MQLコンパイラでC++ソースをコンパイルするためのトリックがない。

TensorFlowライブラリは、多くの関数をエクスポートします。おそらく、必要なのはごく一部でしょう。

使用する関数のプロトタイプを書く。すぐに終わりますよ。


 
Vladimir Simakov:

土下座して書いた、考えるだけ。

最後に、とても興味深いことがあります。これは「Steam Train」のパターンですか?

 
Igor Makanu:

ありがとうございます、でも刺さらなかったです((

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) s = {.

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) ,

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) "A::a1":10

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) }.

その上、静的なものしか扱えません。

defineで1つのメソッドに文字列を集めるのはそれほど難しくないが、考えなければならないことがある

なぜか間違っている)

#define  COMMA (text==NULL?"{\n":",\n")
#define  VALUE(dVal) Push(#dVal,dVal)
#define  STRUCT(dVal) PushStruct(#dVal,dVal.JSon())

class CJSon{
   string text;
public:
   CJSon():text(NULL){}
   CJSon* Push(string key,string value) {text+=COMMA+"\""+key+"\":\""+value+"\""; return &this;}
   CJSon* PushStruct(string key,string value) {text+=COMMA+"\""+key+"\":"+value; return &this;}
   CJSon* Push(string key,long value)   {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   CJSon* Push(string key,double value) {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   string Finish()   {return text+="\n}";}
};

#undef  COMMA

class _CTest{
   int a;
   double b;
   string t;
public:
   _CTest(int _a,double _b,string _t):a(_a),b(_b),t(_t){}
   string JSon()  {return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

class CTest{
   _CTest test;
   int a;
   long b;
public:
   CTest():test(10,0.369,"Hi"),a(555),b(LONG_MIN){}
   string JSon() {return (CJSon()).STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

void OnStart(){
   CTest test;
   Print(test.JSon());
 } 
PS修正