タイピングに関する質問 - ページ 5

 
Ilya Malev:
追伸:ああ、つまり二項演算子を単項演算子としてオーバーロードしたい場合(2-binaryを1-binaryに)、そうですね、もちろん日付ではありませんね。唯一の例外は[]です。

MQLでは、何をどのようにオーバーロードするかが厳密に規定されています。C++では、何をオーバーロードするかは問題ではなく、同じように呼び出すことになります - ^を単項としてオーバーロードすれば、将来も単項として使うことになります

 
Igor Makanu:

そう、MQLでは何をどのようにオーバーロードするかが厳密に規定されています。C++では何をオーバーロードするかは関係なく、同じように呼び出せます。^を単項としてオーバーロードすれば、将来も単項として使うことになります。

そうですね、mqlにはまだ多くの制限があるようなので、改善の余地がありますね :)

また、2値演算を単項演算としてオーバーロードできるようにしてほしい(逆も然り)。

いずれにせよ、オーバーロードすると本来の意味が失われることが多いので、それぞれ、使用の論理がこの意味と結びつかなくなる。許可するのが筋だろう。

 
Ilya Malev:

そうですね、mqlにはまだまだ制約が多いようで、改善の余地がありますね :)

たくさんあって、この制限が現れては消えて、5つになって...。開発者が開発環境を変更することもあるようです ))))

例えば、ヘルプのオーバーロード操作(演算子)の項では、行列を扱う例がコンパイルされていませんが、以前は動作していたことは知っています、現在は、演算のオーバーロードに関わるパラメータの種類のチェックがあります、つまり、私が

int operator*(const int) とすると、int operator*(int) はコンパイルできませんし、ヘルプにそのような例がありましたが、コンパイルが止まってしまいました。

 
Ilya Malev:

プログラマーの皆さん、私は長い間、ある疑問に頭を悩ませていました。関数の戻り値を暗黙のうちに型付けすることは可能でしょうか?そうすれば、クラスのメソッドは、メソッドを呼び出すという外部的なアイデンティティを持つ、異なる型の値を返すことになる。

また、どのような目的で必要なのか、お聞かせください。それがないと宇宙船は作れないのですか?

 
Vasiliy Sokolov:

何のために必要なのか、お聞かせください。それがないと宇宙船は作れないのですか?

そして、お聞きしたいのですが、どのようなことに興味をお持ちなのでしょうか?

 

ついでに言うと、return型のオーバーロードでもない。

一般に、このアイデアは実現性から非常に遠い。

 
Vasiliy Sokolov:

何のために必要なのか、お聞かせください。それがないと宇宙船は作れないのですか?

私も最初は批判的でしたが、自分にも使えると思ったんです。

class Point {
public:
   double price;
   long time;
   operator double()const {return price;}
   operator long()const {return time;}
};

class Array {
   Point p[3] = {{0,1}, {2,3}, {4,5}};
public:
   const Point &operator[](unsigned i) {return p[i];}
};

void start()
{
   Array a;
   double d = a[2];  // d == 4
   long t = a[2];    // t == 5
}
 
Dmitry Fedoseev:

ついでに言うと、return型のオーバーロードでもない。

キャプテン・オビュアーがレスクに?

 
Ilya Malev:

キャプテン・オビュアーがレスクに?

忘れた方はShift+Alt。

 
C#には、明示的な変換と暗黙的な変換があります。便利な砂糖のようですが、非常に暗黙的でIntelliSenseは沈黙してしまうでしょう。1ヶ月もすれば、どのクラスが何に変換できるのか忘れてしまいます。一般的なOOPゲームだが、いい感じ。