mql5言語の特徴、微妙なニュアンスとテクニック - ページ 124

 
このトピックに関係のないコメントは、「ML5におけるOOP、テンプレート、マクロ、Tips and Tricks of the Trade」に移動しました。
 

ここに掲載されたかどうかは分かりませんが、どなたかの参考になるかもしれません。パラメータ化されたクラスのメソッドを、同じ型の引数を値で取るか参照で取るかだけでオーバーロードしたい場合(構造体は参照のみ、単純型は値で渡されることがほとんど)。このようにすることができます(2番目の方法はまさに & のない variant に適用され、そうでなければ構造体による基本的な型付けはコンパイルされません)。

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; }
 };

void OnStart()
 {
    double ask=Ask,bid=Bid;
    MqlTick mt;
    A<double> a1;
    a1<<Ask<<Bid<<ask;
    A<MqlTick> a2;
    a2<<mt; 
 }

ディスカッションはこちら

 
Ilya Malev:

ここだったかどうか忘れましたが、どなたかのお役に立てるかもしれません。パラメータ化されたクラスのメソッドを値のみ、または参照のみでオーバーロードしたい場合(構造体は参照のみ、単純な型は値で渡されることが多い)。これは次のようにしてできます (さらに,2番目のテンプレートは & のない variant に正確に適用されます,さもなければ構造体による基本的な型付けはコンパイルされません).

すると、ある構造体型のために設計されたクラスが、あらゆる種類の数値型を受け入れることができることが判明したのです。そして、それらをどうするか?

 
Alexey Navoykov:

すると、ある構造体型のために設計されたクラスが、あらゆる種類の数値型を受け入れることができることが判明したのです。そして、それらをどうするか?

この場合、クラスは混合型、つまり構造体と単純型の両方を対象としており、そうでなければこの構成は意味をなさない。Fで不要な型を取らないようにするには、そこにtypename(F)、sizeof(F)などのチェックを書けばよい。

 
Ilya Malev:

この場合、クラスは構造体と単純型の両方が混在することを想定しており、そうでなければこの構文は意味をなさない。Fで不要な型を受け付けないようにするには、そこにtypename(F)、sizeof(F)などのチェックを書けばよい。

このため、適切な型を持つオーバーロードされたプライベートメソッドを作成する必要があります。

また、クラスがどのような型にも対応するものであるなら、なぜテンプレート・パラメータでパラメータ化し、混乱を引き起こすのでしょうか?Crutchには、テンプレートクラスを使わない、よりシンプルなバリエーションがありますが。

 
Alexey Navoykov:

クラスがどのような型であってもよいのであれば、なぜテンプレート・パラメータでパラメータ化し、混乱を引き起こすのでしょうか?

では、どのようにすれば、パラメータ化をコミットすることなく、任意の型になりうる正しい型を取ることができるのでしょうか?型を指定せずにパラメータやフィールドを宣言することはできません。例えば、任意のデータ型に関する「ラッパー」クラスである。

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

typenameは不要な型を受け入れることを防いでくれない )

typename(F)==typename(T) と書くとプロテクトされます。

 
Ilya Malev:

では、パラメトリックを渡さずに、何でもありの正しい型をどうやって取得するのでしょうか?型を指定せずにパラメータやフィールドを宣言することはできません。例えば、任意のデータ型に対する「ラッパー」クラスとすることができる。

では、クラスAだけでいいかというと、そのパラメータがクラスの動作に何ら関係ない場合、なぜパターンを宣言するのでしょうか。

イリヤ・マレフ

typename(F)==typename(T)と書けば、それを保護してくれます。

これは本当に残酷なことです。typename コントロールをランタイムステージに...あなたのコードは何年もデバッグされなければならない

 
普通のトレーリングストップを5円で調べられるところを教えてください。
 
Nikita Chernyshov:
普通のトレーリングストップを5円で調べられるところを教えてください。

iSAR iOsMA EA-トレイリング

 
Vladimir Karputov:

iSAR iOsMA EA-トレイリング

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

理由: