D/template

Top / D / template

構文解析・意味解析

構文は常に正しい必要あり。
意味解析はインスタンス化したときに行われる。

インスタンス化

  • 同じ型によるインスタンス化ごとに1つしかインスタンスは作られない
    • 違うモジュールでインスタンス化されていても1つ

abstract class

v0.127

abstract class Base(T) {}
class Derived(T): public Base!(T) {}

はダメらしい(インスタンス化したときに文句が言われる。
Base中に abstractなメソッドがある分にはいいらしい。

あんまりよくわかってない。
2005-07-06 v0.127のままだがコンパイル通った・・・あれ?

子クラスをシグネチャに含むメソッドのoverride

v0.127

class Base(T)
{
	void method(Derived!(T) t) {printf("Base\n");}
}

class Derived(T) : public Base!(T)
{
	void method(Derived t) {printf("Derived\n");}
	/* error
	void method(Derived!(T) t) {}
	override void method(Derived t) {}
	override void method(Derived!(T) t) {}
	*/
}

void main()
{
	Base!(int) base = new Base!(int)();
	Derived!(int) derived = new Derived!(int)();
	base.method(derived);
	derived.method(derived);
	base = derived;
	base.method(derived);
}

挙動としてはオーバーライドしているのだが override とつけるとエラーになる。
Derivedの定義中で Derived!(T) は使えないのでこれもエラー(こっちは正常っぽい。
Derivedをさらに継承する場合は override はOK。


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-07-06 (水) 03:09:50 (6859d)