mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 20

 
Seric29:
マクロの引数数の8要素という制限を解除するには、どうすればよいですか。

マクロの中のマクロが書かれているはずです。

なぜ関数を書かないのか?

 

const修飾子をマクロで削除し、必要なときに無効化することは可能ですか?

ZS: コードがあるんです。

class COrder {
private:
//--- const to send order
   const int         c_cmd;
   const double      c_volume;
   double            c_price;
   const int         c_magic;
   const int         c_stoploss;
   const int         c_takeprofit;
}

は、クラスのフィールドをファイルに書き出し、コンストラクタでファイルから復元することにしましたが、const 修飾子はこれを邪魔します。

コードはほぼ完成しており、理論上はすべてのconstを削除することができますが、...しかし、さらなる改良の機会を失いたくないので、コードの修正時にはconstが非常に役に立ちます。

 
Igor Makanu:

const修飾子をマクロで削除し、必要なときに無効化することは可能ですか?

#define const
 
fxsaber:

うーん、そんな簡単なことか!?

マクロを適用するソースコードの部分を限定するにはどうすればよいですか?

 
Igor Makanu:

このマクロを適用したいソースコードの範囲を限定するにはどうしたらよいですか?

#undef const
 
Igor Makanu:

マクロを使って const 修飾を削除し、必要なときに無効にする方法はありますか?

ZS: コードがあるんです。

クラスのフィールドをファイルに書き出し、コンストラクタでファイルからリストアすることにしましたが、修飾子constが邪魔になります。

コードはほぼ完成しており、理論上はすべてのconstを削除することができますが、...しかし、さらなる改良の機会を失いたくないので、コードの修正時にはconstが非常に役に立ちます。

何を考えているのか?どこもかしこもc_cmdは定数で、1つの関数は定数ではないのですか?もしそうなら、それはUBです(はいμlはそうすることを許可しません)、よく読み取り専用セグメント、コンパイラの最適化のためにそこにある...

 
fxsaber:

うーん、またまたシンプルですね。

ありがとうございました。

ビクト

何を考えているのか?c_cmdはどこでも定数で、ある関数は定数ではないのでしょうか?もしそうなら、それはUBです(はいμlはそうすることを許可しません)、よく読み取り専用セグメント、コンパイラの最適化のためにそこにある...

新規注文(マルチオーダーTS)時に、2つのクラスのすべてのフィールドに、すべての設定と現在の状態を保存することにしました。


保存するクラスのフィールド名でフィールドを分けた構造体を使うことにしました。2分後にエディタでコピーするだけです))、FileWriteStruct()を一回呼び出すだけでフィールドを保存できるのは便利です。)

で、状態を復元するために、例えばこのコンストラクタを使うことにします。

COrder::COrder(SRecovery &property)
:  c_cmd(property.c_cmd),
   c_volume(property.c_volume),
   c_price(property.c_price),
   c_magic(property.c_magic),
   c_stoploss(property.c_stoploss),
   c_takeprofit(property.c_takeprofit)
{

}

このコンストラクタの呼び出しで、定数フィールドを初期化することができます。

データの復元は、端末の再読み込みのみでよい

まだやっていませんが、99%問題なく動くと思います。新しいデータ型(記憶構造)を導入したくなかったのですが、その方が簡単だし、後でコードを読めばいいし・・・コメントは私たちが書くものではありませんから - ))))

 
Igor Makanu:

うーん、またまたシンプル。

ありがとうございました。

新規注文(マルチオーダーTS)時に、2クラスの全フィールドを全設定と現在の状態で保存することにしました。


保存するクラスのフィールド名ごとにフィールドを持つ別の構造体を使うことにしました。これはエディタで2分程度のコピーになります))、FileWriteStruct()の一回の呼び出しで保存できると便利です。)

で、状態を復元するために、例えばこのコンストラクタを使うことにします。

このコンストラクタの呼び出しで、定数フィールドを初期化することができます。

データの復元は、端末の再読み込みのみでよい

まだやってませんが、99%問題なく動くと思います。新しいデータ型(保存用の構造体)を導入したくなかったのですが、その方が簡単だし、後でコードを読めばいいし・・・解説は私たちが書くのではないのです- ))))

書き込み用の一時的な構造体を作りたくない場合は、フィールドを1つずつファイルに書き込み、同じようにコンストラクタから読み込むようにしてください。必ずしも速くなるわけではありませんが、コードの見た目が「醜く」なることは間違いないでしょう。
 
fxsaber:
間違っている。const_cast の対応するものが必要で、それがない。
 

を試してみたが、うまくいかなかった...。

インクルードファイルの呼び出し可能な関数の デフォルトパラメータをオーバーライドするマクロを作成するにはどうすればよいですか?

最初のファイルは、"plugin "です。

class CObj{
public:
   CObj(string host="127.0.0.1"){}
};

CObj obj = new CObj();

このインルーターを接続したいのですが、"127.0.0.1 "という テキストをマクロで置き換えることができます(必要な場合のみ)。

つまり、ここで定義が必要なのです。

#define  defaulthost "192.168.1.10"
#include "mylib.mqh"

しかし、この定義がない場合、host="127.0.0.1" で動作するようにし、defaulthost の 定義がある場合はそれを使用 するようにします。