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

 

ちょうど昨日、抽象メソッドのバグについて 議論していましたが、今日、私のコードで同じバグに遭遇しました)ベースクラスに非抽象の仮想メソッドがあり、継承クラスからそれを参照していました。結果、再帰エラーが一番厄介で発見しづらく、かなり時間を潰してしまいました。少なくともこのバグが修正されるまでは、デフォルトの抽象的なメソッドボディを持つ機能は、ここで非常に役に立つと思います。

 
Alexey Navoykov:

そう、ハエをカツに割り当てるのに、できるだけ便利なように、誰も瞬きもしないようにね)

割り当て処理でフライをカツに持ち込んでいる(できない場合はエラーになる)のであれば、何も問題はないのです。

アレクセイ・ナヴォイコフ

1.それなら、クラスAでいいじゃないか。パラメータがクラスの動作に何の意味もないのに、なぜパターンを宣言するのか?

2)それは面倒だ。型式制御を実行段階に移行する...。あなたのコードは何年もデバッグされなければならない

1. "Just class A "は、その(クラスの)パラメトリゼーションなしに、任意の型のフィールドを含むことはできません。そして、これまで説明してきたような、そういう踊り場がないと、クラスのパラメータを参照で扱ったり、値で扱ったりという統一的な処理はできない。

2.あなたはすでにそれをマントラのように持っている - この場合、FはTであることを保証する絶対にあいまいな記録、それは第二のテンプレートの記録がなかったかのようです。また「何年もかけてデバッグします」 )))))

 
Ilya Malev:

1. "Just class A "は、その(クラスの)パラメータ化なしに、任意の型のフィールドを含むことはできません。そして、そのような工夫をしなければ、クラスのパラメータを参照と値で統一的に扱うことはできません。

2.あなたはすでにそれをマントラのように持っている - この場合、FはTであることを保証する絶対にあいまいな記録、それは第二のテンプレートの記録がなかったかのようです。また「後で何年もかけてデバッグします」 )))))

そして、なぜこのスレッドに返信しているのですか? コードは別の場所で、議論は別の場所で...。)

1.そう、すべては人間らしく、ほとんど踊ることなくできるのです。

struct __A
{
  template<typename T>
  void f(T&) { }  // Сюда структуры и классы
};

struct A : __A
{
  template<typename T>  
  void f(T) { }  // Сюда простые типы и указатели
};

2.そういうことではないのですが、気にしないでください。

 
Alexey Navoykov:

なぜこのスレッドで回答しているのですか? コードは別の場所で、議論は別の場所で...)

1.そうすべては人間的な方法で、ほとんど踊ることなく行うことができるのです。

2.他にもあったけど、それは関係ない。

どのスレッドで何が適切か判断するのは、まだ司会者ではないような気がします。また、モデレータは、機能に関する議論は機能ブランチそのものではなく、別のブランチ、つまりここで行うべきだとすでに明言しています。

あなたの説明では、クラスメソッドを 参照とT型値で統一的に参照する方法がまったくわかりません。どういう意味かわかりませんが、まさにそこに意味があったのです。

 
Ilya Malev:

どのスレッドが適切か判断するのは、まだ司会者ではないようですね。そしてモデレーターはすでに、機能の議論は機能の枝で行わず、別のスレッド、すなわちここで行うべきであると明言しています。

だから、モデレーターがそれを移動させたいなら、それは一つのことですが、なぜ自分で混乱を引き起こすのでしょうか? たとえば、私は、スレッドを駆け足で見る気はありません。

 
Alexey Navoykov:

だから、モデレーターがそれを移動させたいなら、それは一つのことですが、なぜ自分で混乱を引き起こすのでしょうか? たとえば、私は、スレッドを駆け足で見る気はありません。

もし、モデレーターがこのようなことをするとわかっているのであれば、モデレーターがするのを待つよりも、自分でしたほうがいいに決まっているのです。しかし、モデレーターの行動を議論することは、モデレーターの好きなメニューでもないので、止めた方が良いと思います。

 
Alexey Navoykov:
Сюда простые типы и указатели

ちなみにポインタの場合は、T*を引数にした別のメソッドを作るのが論理的です。間違いなく混乱はありませんし、ポインタの扱いが通常の型と異なる(有効性チェック、削除など)というメリットが最も多いからです。

 
Alexey Navoykov:

コードは別の場所で、ディスカッションは別の場所で

以下はそのコードです。

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

実はこのエントリ以外にも解決策があります。値で渡される単純な型をすべて名前でリストアップし、&でテンプレートメソッドを書けば、エラーにはなりません。このオプションは、固有のパラメタリゼーションを持たないクラスに適しています。

 
Ilya Malev:

モデレーターがまさにそうするだろうということに気づいたら、モデレーターがやってくれるのを待つより、自分でやったほうがいいに決まっています。しかし、モデレーターの行為について議論することは、モデレーターも好きなメニューではないので、止めた方が良いと思います。

司会者が議論を別スレッドに分割することは確かにありません。 あなたは「司会者を待たずに」 自分さえも禁止したいほどなのでしょう))
 
Ilya Malev:

モデレーターがまさにそうするだろうということに気づいたら、モデレーターがやってくれるのを待つより、自分でやったほうがいいに決まっています。ただ、モデレーターの行為について議論するのは、モデレーターも好きなメニューではないので、止めた方が良いと思います。

1.司会者がどうこう考えるより、この「何か」がどこにあるのか、すぐに話を始めたほうがいい。そうしないと、本当にすべてが2つのスレッドに曖昧になってしまい、今ではモデレーターが「あそことあそこで議論すべき」と判断しても、投稿の順番と意味を守って普通に議論を動かすのはかなり手間がかかる作業になっています。

2 モデレーターの行為について議論することは、すべてのくしゃみではありません...。すべてのくしゃみではありませんが、公に挑戦するときは、秩序を回復するためであれ、熱狂を鎮めるためであれ、です。そして、もしあなたが意見を持っているならば、それを表明することを誰が禁じるのですか?もしかしたら、あなたの意見は非常に合理的な提案なのですが、司会者の愛されないメニューに該当しないように、言うのを恐れているのではありませんか?だから、それはデタラメだ :)

理由: