オーバーロードした関数の関数ポインタ

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
k.kiyo

オーバーロードした関数の関数ポインタ

#1 投稿記事 by k.kiyo »

オーバーロードした関数の関数ポインタが正しく動作しません。
下の例では、引数が1つの関数を呼び出しているのに
実際は引数のない関数が呼ばれます。

コード: 全て選択

sub update()
    print "update()"
endsub
sub update(n as long)
    print "update(long)"
endsub

dim pf as *sub(n as long)
pf = addressof(update)
pf(0)
AB4.22 WinXP
Mario2
記事: 205
登録日時: 2005年5月31日(火) 13:31
お住まい: 大阪市
連絡する:

Re: オーバーロードした関数の関数ポインタ

#2 投稿記事 by Mario2 »

コード: 全て選択

sub update()
    print "update()"
endsub
sub update(n as long)
    print "update(long)"
endsub

dim pf as *sub(n as long)
pf = addressof(update)
pf(0)
と言うか、「update」が2つあるのに、エラーを出さないこと自体バグの可能性があるような・・・?
多分、引数のあるほうを上にするとあるほうのが動作すると思います(分かりませんが・・・)
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

C++だとオーバーロードされた関数のアドレスを得るときには,
代入する先などの型に応じて適切な関数を選ぶそうです。
http://d.hatena.ne.jp/Cryolite/20040820

これを使う方はともかく,実装する方は面倒でありそうな仕組みですが。
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#4 投稿記事 by 山本 »

ご報告ありがとうございます。

次回のバージョンアップで、AddressOf関数は左辺の型を考慮した上でオーバーロードを解決するよう、修正しようと思います。
返信する