何種類かの手続きを入れられる変数

解決


たかみちえ  URL  2003-02-11 00:09:41  No: 2877

ええと、手続きや関数を変数に格納し、
それをつかうには、
type
  TPointCB    = procedure(SrcRGB,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
  などとして型宣言した後、
  Process : TPointCB
などとやればいいですけど、
  これを用途の同じ何種類かの手続きを入れられるようにはできないでしょうか?
たとえば
type
  TPointCB    = procedure(SrcRGB,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
  TPointCB2   = procedure(SrcRGB,SrcRGBUR,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
  とやって、
変数に両方の手続きを入れられるように。

  設計自体考え直して、こうならないようにするしかないんでしょうか?
よろしくお願いします。


Kob  2003-02-11 02:19:19  No: 2878

> 変数に両方の手続きを入れられるように。

おそらく無理だと思います。

言語ガイド 5-28 より

2 つの手続き型が次の条件を満たす場合にだけ
相互に互換性があります。

1. 呼び出し規約が同じ
2. 戻り値が同じであるか、又は戻り値がない
3. パラメータの数が一致し、パラメータの型と順序も一致する

------

となっています。それぞれ別の変数を用意する必要が
あるのではないでしょうか。

それでは。


たかみちえ  URL  2003-02-11 08:24:52  No: 2879

そうですか…。C言語ではたぶん常識的なことなのではないかと思ったんですけど…。

  しばらく考えてみます。


にしの  2003-02-11 08:38:24  No: 2880

関数への参照でなく、完全にポインタとしてしまうとか。
これがまずいんでしょうかね。

あとは、引数を確実に同じにする。
たとえば、バリアントの配列で渡すなど。


たかみちえ  URL  2003-02-13 08:27:40  No: 2881

そうですか…。ポインタですか、
  わたしも考えてみて、実はそれ以外に方法が思いつきませんでした。
  なにか、いい方法があるんじゃないかと、思っていたんですけど…。

  バリアント型というのを、Delphiでは使ったことないので、
いまいちわからないですけど、
ヘルプを読みながら、やってみます。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加