そしてD
Dに不都合を避けるための変な命名規則が追加されない事を祈ります。
本気で避けようとするならば、グローバル識別子をtemplate中で使うのを避けて全部引数で貰うとか、常にモジュール名からだらだら書くか…
いやまてよ。templateが宣言されたモジュールがprivate importしているモジュールで宣言された識別子を使っていた場合、それを更にimportしたモジュールからそのtemplateをmixinするとわけわからんエラーに見舞われるのでは?
見渡す限り、結構好意的に受け取られてるのが、信じられんです。
…Dでも、templateを普通に使うと、宣言場所のスコープで解決されますので、不統一です。…ということで、バージョンがふたつかみっつ進んだあたりで直されそう、と予言しておきましょう。
スコープの話題はさておいて。
仮想関数とかも追加できるということは、BEGIN_MESSAGEマクロと同じように展開されるようなものは書けるのでしょうか?
//嘘コード class My_Window : Window { ... //実は仮想関数dispachをoverrideしてswitch〜caseを追加している mixin message_dispacher!(My_Window, Window, message_handler!(WM_SIZE, wm_size_handler), ... ); void wm_size_handler(WPARAM w, LPARAM l) { ... //親クラスにWM_SIZEのハンドラがあればそれを、無ければデフォルトハンドラ(DefWindowProcなど)を探す mixin inherited!(WM_SIZE) super_handler; super_handler.call(w, l); } ... }
できたらそれはそれで便利な気がします。
まんまマクロの用法ですが。