2

プロシージャと関数に同じ名前を使用したいのですが、これを行うことはできますか?この問題に関する規制はありますか?

 /// first version 
 function RunMyImageProcess (aRect : TRect; aBitmap : TBitmap ):  TPoint; overload ;

 ///  a overload version, this works  , it is simple :-) 
 function RunMyImageProcess (aRect : TRect; aBitmap : TBitmap ; aprocessflag : Boolean):  TPoint; overload ; 

 ///  need now a procedure
 ///  will return 2 Points now !!!
 ///   can I do this in DELPHI ???? 
 procedure RunMyImageProcess (var LowerLeft, Upperright: TPoint; aBitmap : TBitmap ; aprocessflag : Boolean):  boolean; overload ;
4

1 に答える 1

9

同じ名前のオーバーロードされた関数とプロシージャを使用できます。

ただし、オーバーロードの識別を関数の戻り値の型に依存することはできません。したがって、同じ引数リストを持つ関数とプロシージャがある場合、それらはオーバーロードできません。

過負荷で怒らないように注意してください。あなたが陥る可能性のあるあらゆる種類の罠があります。たとえば、浮動小数点または整数の引数に基づいて区別する場合、どちらのオーバーロードを呼び出しているかを確認するのが難しい場合があります。Embarcadero が XE3 TStream のオーバーロードで発見したように、ポインターと動的配列を区別すると混乱する可能性も大いにあります。

実際、オーバーロード規則のドキュメントは不完全であり、コンパイラの動作を完全に理解する唯一の方法はリバース エンジニアリングによるものです。

于 2013-03-29T22:52:11.553 に答える