#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }\
virtualvoid NextStepStrategy(void) {FUNC;}}
//____________________________________________________________________
#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }\
void NextStepStrategy(void) override{FUNC;}}
UPDです。
そうではなく、パーミッション制御のために出てきたもので、パブリックメソッドは必要ありません。
#define CLASS(NAME,FUNC) class NAME : public CStrategy{\
private:\void NextStepStrategy(void) override {FUNC;}\
public:\
NAME(SStrategySettings &set):CStrategy(set){ }}
は、OOPスタイルのコードとの戦いの結果を見て、うーん...と思いました。善哉善哉))))
質問があるのですが、私のコードでは、まあ正確には3回ですが、こんな構文を使っています。
はすべてprivatメソッドで呼び出しますが、CheckPointer(m_order)==POINTER_INVALIDからソースコード上で逃れるための「Jediメソッド?
いくつかのget/setについて質問しています。
特別な問題はなく、いわば気まぐれで、C++のOOPメソッドの知識への渇望がまだ衰えていないうちは
もし質問が「多くの文字」であれば, !CheckPointer(mPtr) とし,関数呼び出しの 場合は,コンストラクタですべてのポインタを NULL に初期化し,コード内でそれと比較し, ptr; を削除するときに忘れないようにします.
は、OOPスタイルのコードとの戦いの結果を見て、うーん...と思いました。善哉善哉))))
質問があるのですが、私のコードでは、まあ正確には3回ですが、こんな構文を使っています。
はすべてprivatメソッドで呼び出しますが、CheckPointer(m_order)==POINTER_INVALIDからソースコード上で逃れるための「Jediメソッド?
いくつかのget/setについて質問しています。
特別な問題はなく、いわば気まぐれで、C++のOOPメソッドの知識への渇望がまだ衰えていないうちは
イゴール、この例を見て くれ、そういうことなんだろう。
もし質問が「多くの文字」であれば, !CheckPointer(mPtr) とし,関数呼び出しの 場合は,コンストラクタですべてのポインタを NULL に初期化し,コード中でそれと比較し, ptr を削除するときは忘れずに ptr=NULL にします.
まあ、それとこれ、砂糖のため。
特に問題はないのですが、気まぐれというか、C++でOOPメソッドを学びたいという渇望がまだ枯れていないうちは、そうしていました。
コンストラクタで、クラスのすべてのフィールドをデフォルト値で初期化することを強くお勧めします。要は、これをやりたいのであれば
void foo(){ CClass someClass; someClass.DoSomething(); }
nobody はクラスのフィールドを初期化するので、ゴミのような値になってしまいます。
そして、これ、砂糖の場合。
いや、定義についてはほとんどあきらめていて、数週間前に書いたように、何もラップしたくないだけなんです。とりあえず純粋なOOPスタイルのコードを見て、柔軟性と可能性を評価したいんです
HH: 3行で同じ初期化を書かないように、子孫をdefineでラップして、後でメソッドを追加しやすいようにした。
イゴール、この例を見て くれ、君が求めているのはそれだと思う。
いいえ、私はC#で同等のものを意味します - 演算子?( null-join 演算子 ) のような、C++ スタイルで見たいロジックに近いもの。
UPDです。
コンストラクタで、クラスのすべてのフィールドをデフォルト値で初期化することを強くお勧めします。要は、これをやりたいのであれば
マクロを求めるなら、誰もクラスのフィールドを初期化しないし、ゴミのような値も出てくる。
ということで、コンストラクタはベースクラスのあらゆるものを初期化し、子孫はベースクラスを初期化するようにしました。
ということで、ちゃんと初期化し忘れないようにマクロで包んでおきました )))
いや、定義についてはほとんどあきらめていて、数週間前に書いたように、何もラップしたくないだけなんです。とりあえず純粋なOOPスタイルのコードを見て、柔軟性と可能性を評価したいんです
ZS:生成時にdefineで子孫をラップするだけ、同じ初期化を3行で書かない、後でメソッドを追加しやすい、つまりソースコードでは今のところ1行で済む。
いいえ、私はC#で同等のものを意味します - 演算子?( null-join 演算子 ), C++ スタイルのロジックで似たようなものが欲しいです。
プリプロセッサの拒否は無駄です。テンプレートと並んで、最も強力なツールです。演算子のアナログはないようです。この点では、C++の方がよりハードコアです。
私はまだ純粋なOOPスタイルの戦いの中にいます、私はフォーラムに資産がある間に、すべてのOOPテクニックを学びたい;)
プリプロセッサーでスピードアップしたが、、、。少なくとも、私のスタイルでは、悪用しない方がいいと思います。失敗するかもしれないし、確かに複数のマクロ置換があるコードを読むことはできないでしょうし、バグをどう探すか・・・まあ、書き直す方が簡単ですから、まだ必要ないですね
テンプレート...まあ、SBで開発者が提供するものが気に入らない、全部目を通したが、何のためにSBに入れたのかわからない、まだその時が来ていないのかもしれない。
C++テンプレートのMQLへの移植について - 議論が示すように、ほとんどの場合、C++テンプレートはMQL用に微調整が必要です - .dllに戻ってMQLを気にしない方が簡単です )))
私はまだ純粋なOOPスタイルの戦いの中にいます、私はフォーラムに資産がある間に、すべてのOOPテクニックを学びたい;)
プリプロセッサーでスピードアップしたが、、、。少なくとも、私のスタイルでは、悪用しない方がいいと思います。失敗するかもしれないし、確かに複数のマクロ置換があるコードを読むことはできないでしょうし、バグをどう探すか・・・まあ、書き直す方が簡単ですから、まだ必要ないですね
テンプレート...まあ、SBで開発者が提供するものが気に入らない、全部目を通したが、何のためにSBに入れたのかわからない、まだその時が来ていないのかもしれない。
C++テンプレートのMQLへの移植について - 議論が示すように、ほとんどの場合、C++テンプレートはMQL用に微調整が必要です - .dllに戻ってMQLを気にしない方が簡単です )))
自分でそのようにテンプレートを書けばいいのです)))
Yup )))
私はヘルプを読み終えて、オーバーライドをスキップしました、すべてがマクロであることに感謝し、編集、まあ、正確に1つのコピーペーストで
UPDです。
そうではなく、パーミッション制御のために出てきたもので、パブリックメソッドは必要ありません。
そして、砂糖にはこれ。
ではなく、昔持っていたものを書きたかったのです。
という感じでした。
が、MQLでマクロ置換を確認する方法を思い出しました。
2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1
2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID= 0
2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0
そして、私の記憶が正しければ、今年の初めには、NULLをログにアンプリンターすることができ、そこで0を得ることができましたが、今ではエラーが表示されるようになりました。
つまり、NULLの挙動は今後も変わらないはずですが、NULLの代わりに何が代入されているのかが不明です。おそらく、この状況を今チェックすると、if(CheckPointer(m_order)==POINTER_INVALID)) と書かれているように、 正しいコードと言える でしょう))