template<typename T>
class A { public:
booloperator==( const A& ); //error: 'operator' - function must have a body
T t;
};
class B {
A<int> a;
};
template<typename T>
bool A::operator==( const A& ) { returnfalse; }
voidOnStart()
{
A<int> a, b;
Print( a == b );
}
そのとおりです。これで、あらゆる種類の関数や変数を一度に呼び出すことができるようになりました。このような曖昧さには、偶発的なエラーを引き起こさないような常識が必要 です。私見では、誤って別のfを拾って定義したときに問題が発生するくらいなら、typename fに空文字列を発行して誤魔化すのが論理的だと思います。
どこの国でも、特にバグの中で頑なに常識を探すのはやめましょう。あなたの話を聞けば、MQLのどんなバグも、まったくバグではなく、賢明な開発者が盛り込んだ機能なのです ))。
すでに述べたように、疑問があれば、まずC++で確認し、解決策を考えることです。
曖昧さについては、コンパイラのエラーになり、問題はないはずです。サンプルA100では、すべてがクリアで曖昧さがなかったので、意味がよくわからないのですが。関数をオーバーロードする必要があればオーバーロードし、曖昧な部分のコンパイル エラーを修正すればそれで終わりです。
MQLでテンプレートクラスの静的メンバを 初期化する方法を教えてください。
MQLでテンプレートクラスの静的メンバを 初期化する方法を教えてください。
MQLでテンプレートクラスの静的メンバを 初期化する方法を教えてください。
A100:
一般的には、もちろんC++には対応しない方法ですが、MQLでは有効です。
クラス外のメソッドで同様の問題が発生しました。
おかげさまで解決しました。
もちろんこれも間違いですが、これはテンプレートクラスのメソッドではなく、テンプレートメソッドを定義することを意味するからです。また、クラスが両方を含んでいる場合、曖昧さが生じますクラス外のメソッドを取る際にも、同じような問題がありました。
この方がずっと便利なんです。唯一の制限は、間に別のクラス(例のように)を挟むことができないことです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
エラー、バグ、質問
A100, 2016.05.19 23:26
コンパイルエラー
というのも、これはテンプレートクラスのメソッドではなく、テンプレートのメソッドを定義することを意味するからです。また、クラスに両方が含まれる場合は、曖昧さが生じます
それはない。すべて私たちの前に考えられているのだから(C)。テンプレート行を2回繰り返す必要があります (上の行はクラス、下の行はメソッドを参照します)。
これ、めっちゃくちゃヤバくない?
A100:
その方がずっと便利です。
うん、まあ、<T>をつけなくていいというのは、それだけ重大な利便性なんだけどね(笑)。
ああ、<T>を付けなくていいってのは、それだけ重大な利便性なんだな(笑)。
クラス外のメソッドを取る際にも、同じような問題がありました。
もちろん、これはテンプレートクラスのメソッドではなく、テンプレートメソッドを定義することを意味するので、間違っています。また、クラスに両方が含まれる場合は、曖昧さが生じます。
メソッドがクラスの外に置かれることが多いことに気づきましたが、なぜでしょうか?SBに目を通したところ、「小さい」メソッドは1行で一気に、「長い」メソッドはクラスの外で定義されているんですね。外部定義におけるALT+Gは1つではなく、2つのトランジションポイントを提供するため、知覚の利便性はありません。また、過負荷がある場合は、それぞれ2の倍数とする。ALT+Mでもう全部一度に表示されるし。
もしかしたら、これはインターフェース定義のわかりやすさに対するある種の賛辞なのかもしれませんが、今のところ、私はそこに踏み込んでいません。