記事"C plus plus テンプレートの代用としての疑似テンプレート使用"についてのディスカッション

 

新しい記事 C plus plus テンプレートの代用としての疑似テンプレート使用 はパブリッシュされました:

本稿はテンプレートは使わないが、プログラムスタイルはテンプレートに合ったものを保持する方法について述べていきます。カスタムメソッドを使ってテンプレートを実装することをお伝えします。また、指定のテンプレートを基にしたコード作成用既製のスクリプトを添付しています。

作者: Nikolay Demko

 

何も理解できなかったが、この記事は気に入った。

「テンプレートが解決する主な課題は、プログラマーがキーボードから入力するコードの量を減らすことだ。

コピーペーストなしでできるのに、なぜわざわざテンプレートを使うのか?入力されるコードの量もまったく気にならない--まあ、100行のコードが300行になるわけだが--。主なことは、それが機能し、デバッグに過度のストレスを与えないということだ。

そして、テンプレートがなければ、コードはより透明になる。

 
Virty:

何も理解できなかったが、この記事は気に入った。

「テンプレートが解決する主な課題は、プログラマーがキーボードから入力するコードの量を減らすことだ。

コピーペーストなしでできるのに、なぜわざわざテンプレートを使うのか?入力されるコードの量はまったく気にならない。まあ、100行の代わりに300行のコードがあるだろうが、それで何が悪い?主なことは、それが機能し、デバッグに過度のストレスを与えないということだ。

それに、テンプレートがないほうがコードの透明性は高くなる。

300 :)

1~2万行(モジュールへの分割を考慮した場合)はどうだろう??

 
Interesting:

300 :)

そして1~2万ドル......あなたはどうですか??

本当に2万ですか?なんてこった、どうやってそこを掘り下げるんだ?アルゴリズムが確定していないのでは?そんなサイズはとっくにライブラリ化されているはずだ。何をプログラムしているんだ?20,000行といえば、プログラマー10人で6ヶ月の作業だ。
 
Virty:
2万人ですか?おいおい、どうやって調べるんだ?アルゴリズムが確定していないのでは?そんなサイズはとっくにライブラリに入れるべきだ。何をプログラムしているんだ?20,000行というと、半年で10人のプログラマーが作業することになる。

ライブラリに関しては、モジュール性を考慮すると言ったはずだ。

20,000行については、私たちはもっと多く見てきました。例えば、1C 7.7用のmodzliは5万行です(これは彼ら自身のコードではなく、他の人のコードです)。

 
ニコライ、いい記事だね。たぶん気に入って、MQL5で「テンプレート」を使うことになるだろう。
 

タスクの本質を理解していないかもしれませんが、お許しください。C++ではソースコードのレコードの保存があるが、ここではそれがない。C++の関数テンプレートは、本当に節約できる場所を示している。「ソースコードの節約」が重要なアイデアです。

そして、明らかに過剰な量のソースコードを生成して、後で作業するのを困難にするのは、まあ、勘弁してください。

異なるデータ型に対して同じ関数が必要ですか?MQL5にはメソッドのオーバーローディングが ある。間違いなくご存知でしょう。特に、入力データの型を変えるには実装を変える必要があることが多いからだ。

そしてこれについては

>>デバッグのためには、もちろん、呼び出されたファイルのディレクトリかインクルード・ディレクトリにファイルを移動しなければなりません。これはまさに、上で擬似テンプレートの欠点について述べたときに述べた、デバッグの不便さである。

何も手動で移動する必要はありません。

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
void gena() 
  {
   string filename="code.mqh";
   int handle=FileOpen(filename,FILE_WRITE|FILE_UNICODE);
//-- 任意のコード生成
   string st=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS);
   string code="MessageBox(「こんにちは、世界です!現在: "+st+"\");\r\n";
//------------------------------
   FileWriteString(handle,code);
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   gena();
   #include "../Files/code.mqh"; // 生成されたコードをインクルードする
//---
   return(0);
  }

この例は原始的です。インクルードは関数の中に挿入できる。そして、インクルードされたファイル内のすべてのコードは、挿入された場所の可視性の範囲内で動作します。ただひとつ、コンパイラが悪態をつくのを防ぐために、Filesに空のcode.mqhファイルを作成する必要があります。最初の実行でコードが作成され、2回目の実行で生成されたコードがインクルードされます。

 

ニコライ、質問だ。文字列を評価する関数はありますか?例えば

str="double a=1.5;"

void eval(str);
Print(a); // a=1.5

eval(str) 関数が必要で、結果はa=1.5です。

この記事は素晴らしいです!

 
denkir:

ニコライ、質問だ。文字列を評価する関数はありますか?例えば

eval(str) 関数が必要で、結果はa=1.5です。

この記事は素晴らしいです!

質問は評価についてではなく、構文解析についてだと理解しています。構文解析は非常に多機能です。

さまざまなルールを書くことができます。何を得たいかによります。

例えば、「このような例ではパーサーはどのように振る舞うべきか?

"double a=1.5;"
"double a =1.5;"
"double a = 1.5;"
"double a=1.5,b=2.5;"
"double a =1.5,b =2.5;"
"double a = 1.5,b = 2.5;"
"double a = 1.5 , b = 2.5 ;"
ということだ。簡単な例で文字列関数のセクションの機能を勉強することをお勧めします。メモリから関数を操作できるようになれば、機能の可能性に基づいて開発計画を立てることができるようになります。何ができて何ができないかを考えずに。機能の可能性を知ることで、どのアルゴリズムがあなたの課題を解決するのに最も適しているかが明確になります。
 
Urain:

だから、質問は評価についてではなく、構文解析についてだと理解している。構文解析は非常に汎用性が高い。

さまざまなルールを持つことができる。何を得たいかによります。

例えば、このような例ではパーサーはどのように振る舞うべきか。

そうだね。簡単な例で文字列関数のセクションの機能を勉強することをお勧めします。メモリから関数を操作できるようになれば、機能の可能性に基づいて開発計画を立てることができるようになります。何ができて何ができないかを考えずに。機能の可能性を知ることで、どのようなアルゴリズムが課題解決に最も適しているかが明確になります。
ご回答ありがとうございました。勉強してみます。
 
denkir:
お返事ありがとうございます。勉強してみます。
ちなみに、論理演算< > ==は文字列に対して 定義されています。
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
  • www.mql5.com
Основы языка / Операции и выражения / Логические операции - Документация по MQL5