仮想関数の強化
abdev 9月 7th, 2005今日は朝から知人に指摘された仮想関数に関する機能を実装しているところです。内容は、クラス継承時に仮想関数をオーバーライドしたときのvtableの上書き動作です。
その前に、ABでは仮想関数を保持するクラスをNewしたときのコンパイラ動作が未完成のままになっています。まぁ、仮想関数なんてのは、COMインターフェイスくらいにしか使われないだろうと軽視していたのが悪いのですが、どうやらその他にも色々と便利な機能があるようで…。
とにかく、仮想関数周りのコンパイラ機能をしっかりとさせます。ABの仮想関数は、
Virtual Function 関数名(パラメータ) As 型
という1行のコードからなります。こいつは、仮想関数のプロトタイプ宣言になるので、Function 〜 End Function間の実装を記述することはできません。
プロトタイプ宣言にプラスする形で、実装を記述できる言語仕様へと拡張が必要です。また、Javaのように、メンバ関数がデフォルトで仮想関数になったほうが良い場合もありそうなので、クラス定義の際のオプション指定子を考えてみようかと思います。
9月 7th, 2005 at 22時04分29秒
待っていました、仮想関数。これもまたABの大きな拡張になるでしょうね。
9月 7th, 2005 at 23時28分33秒
AB4をリリースする段階で、COMインターフェイスのために用意した仮想関数でしたが、「仮想関数」そのものの良さを引き出すためには、インターフェイスとは別物として考える必要がありそうです…。本家コミュニティのほうに、アナウンスしてありますので、何かアドバイスがあったら、お願いしますm(__)mポリモフィズムの味、ABも出していかなければ…
9月 9th, 2005 at 23時11分11秒
C++では仮想関数と純粋仮想関数という形で区別していますよね。ActiveBasicではVirtualとPureとかで区別すればいいんじゃないですかね。新たにコマンドを導入するよりは合理的かと思います。アナウンスの方にも書いておきました。