投稿数 - 437, コメント - 59536, トラックバック - 156

Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

Windows Developer Magazine で επιστημη さんが連載されている「世界はオブジェクトの海に浮かぶ」で、今回は「Generics 雑感」として記事を書かれています。


その中で「C# Generics のココが不満」という節があり、C++ の template と比較されています。
「制約による縛り」という項目が私の考えと違っていたので、少し。

class Printer<T>{
 public static void Print(T t){
  Console.WriteLine("以下のとおり出力します。");
  t.Print();
}

class Greet{ public void Print(){ Console.WriteLine("Hello, world"); } }
Printer<Greet>.Print(new Greet());

上記は C# のコードですが、C++ ならば、OK の構文。つまり、C++ では、「型 T」 に Print() メソッドが存在しさえすれば問題ないのです。
C# ならば、コンパイル時にエラーになります。「型 T」に Print() メソッドが存在するかどうかが分からないからです。

interface IPrint{
 void Print();
}

を用意して、Printer と Greet のそれぞれに適用させてやれば、C# でも OK になります。(適用の仕方は調べてください)


私はこの「縛り」が逆に C# の Generics が C++ の template と比べて利点になると思いました。
C++ ではこの「縛り」がないため、「型 T」に渡してもよい型が、明示的に開発者に伝わりません。(Print() がなければ、コンパイルエラーにはなりますが。)
しかも「型 T」に渡す型が、たまたま 意図と違う Print() メソッドを持っていたら、意図通りに動かないでしょう。(Print() メソッド一つだけなら、ありえないかもしれません。しかしもっと複雑になると発生する可能性が高まります。)


C# の Generics は IPrinter.Print() を持つ事を「型 T」に縛るので、上記2点が解決した、と思います。


どうでしょう。

# 記事中のソースコードは「Windows Developer Magazin 01 月号 『世界はオブジェクトの海に浮かぶ』」からの転載です。
# επιστημη さんからは許可を頂きました。ありがとうございます。

投稿日時 : 2005年12月11日 17:04

フィードバック

# re: Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

難しいとこですね。この"縛り"をどう受け止めるか、なのでしょうけど。
C++でのtemplateは超高級マクロみたいなもんなので字面(形式)さえ正しければ受け入れてしまいますから。
それがイケナイとするなら、delegateなんてのもシグニチャ(つまり形式)さえ正しければ受け入れてるわけで。
2005/12/12 6:30 | επιστημη

# re: Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

コメントありがとうございます。しかもあの επιστημη さんから・・・。

>それがイケナイとするなら、delegateなんてのもシグニチャ(つまり形式)さえ正しければ受け入れてるわけで。

「特定の型」を受け入れる C# の Generics と、「特定のシグニチャのメソッド」を受け入れる delegate は同じ方向を向いていると私は思います。
delegate はシグニチャさえ伝えれば十分なわけです。

>難しいとこですね。この"縛り"をどう受け止めるか、なのでしょうけど。

確かに。
この"縛り"は大多数に受け入れられるものだと思っていました。しかし επιστημη さんの記事を読んで「なるほど。こう受け取る人がいるんだな」と気づきました。
どちらが多数派なんでしょうね^^;
2005/12/12 12:58 | 囚人

# re: Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

うほ! えぴすてーめーさんだ!!
すげー。
2005/12/12 13:43 | じゃんぬ

# re: Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

いや、そないに舞い上がらんかて…
2005/12/12 23:59 | επιστημη

# re: Windows Developer Magazine 01月号 「世界はオブジェクトの海に浮かぶ」

いや~、このパターンはお決まりにしようかと... (^^;)

そういえば、以前「世界はオブジェクトの海に浮かぶ」は私も拝見しました。
でも、この号じゃなかったかもしれません。
最初の回だったかもw
2005/12/14 8:55 | じゃんぬ

# template vs generics

template vs generics
2006/11/21 23:59 | 東方算程譚

# http://burberry.suppa.jp/

突然訪問します失礼しました。あなたのブログはとてもすばらしいです、本当に感心しました!

# I do not even know the way I ended up here, but I believed this post used to be great. I do not recognise who you're but definitely you're going to a famous blogger should you are not already. Cheers!

I do not even know the way I ended up here, but I believed this
post used to be great. I do not recognise who you're but definitely you're going
to a famous blogger should you are not already. Cheers!

コメントの投稿

タイトル
名前
URL
コメント