irc.codecheck.in#codecheckin

13:05:08 はてなブックマーク - 新着ブックマーク - trac.codecheck.in: CakeOnEmacs - codecheck.in - Trac ( lapis25++ ) [cakephp, emacs] - http://trac.codecheck.in/share/wiki/CakeOnEmacs
13:05:08 (chokan) lapis25: 2 (2++ 0--)
13:05:09 (chokan) CakeOnEmacs – codecheck.in [text/html;charset=utf-8]
13:09:03 つかぬこと聞くけど
13:09:14 ジェネリックプログラミング やってる人っている?
13:47:20 Javaジェネリクスは使いますけど > vivisuke
13:47:31 おお
13:47:40 C++ では やってないのね
13:47:40 (chokan) C: 5 (5++ 0--)
13:47:44 うにに
13:47:57 なんか コンパイルエラーが出るんだけど
13:48:06 すげーわかりずらい@VC6
13:48:08 C++ を書かないっす、自分...
13:48:09 (chokan) C: 6 (6++ 0--)
13:48:13 java だと
13:48:18 エラー分かりやすい?
13:48:20 そかー
13:49:12 コンパイルエラーがわかりくいと思ったことはないですねぇ
13:49:20 そかー
13:49:39 C++コンパイラ or 文法が悪いのか・・・
13:49:39 (chokan) C: 7 (7++ 0--)
13:50:19 ジェネリックプログラミングの勉強会@福岡とか ないのかなぁ
13:50:36 本来生産性あがるはずなのに
13:50:49 エラーの分かりづらさのせいか 全然進まない orz
13:51:55 Javaジェネリクスは、すごく便利ですし、たしかに生産性があがると思います
13:52:32 設計変更のとき楽になると思う
13:52:36 というか、Java使いなら普通に自然に使ってると思います。
13:52:40 そかー
13:52:46 Java 使わない
13:53:01 すれちがいですね(笑)
13:53:06 初期の Java って テンプレート機能が無かったはずじゃが
13:53:08
13:53:15 最近は 出来るようになったのね
13:53:45 たしかに、ジェネリクスはあとで追加されました。
13:54:00 まあ C++ のテンプレートも
13:54:00 (chokan) C: 8 (8++ 0--)
13:54:04 初期にはなかた
13:54:17 もうJava5からなので、もう5年くらい前ですねぇ
13:54:29 ふみゅう
13:54:35 cpp はいつだろう?
13:54:38 C++にもなかったんですか、へぇ
13:54:38 (chokan) C: 9 (9++ 0--)
13:54:45 1995年には 少なくともあった
13:55:44 なかなか歴史がありますね
13:55:50 うん
13:56:11 でも 1990年〜1995年頃のプロジェクトでは使ってなかた>テンプレート
13:56:26 日本では 1995年頃に STL が紹介されてから
13:56:34 徐々に使われだしたのかなぁ
13:58:30 Java でも < > を使うのか・・・
13:58:41 そうですね
13:58:54 あれ 宣言はどうするんだろう・・・
13:59:22 List とか便利です
13:59:28 ほお interface で宣言するのか
14:00:45 宣言としては とかですかね?
14:00:56 CPP だったら
14:01:18 template< テンプレート引数たち > クラス定義;
14:01:21 と書く
14:01:52 ああ
14:01:56 ちゃうわ
14:02:15 いあ
14:02:17 いいのか
14:02:36 なるほど、それはJavaだと
14:03:16 class Hoge { ... }
14:03:36 みたいな感じですね
14:04:08 うにに
14:04:11 CPP だと
14:04:38 template< template<> class T> class CHoge { クラス定義 };
14:04:45 とか書ける
14:04:57 最初みたとき 意味がわからんかった ↑
14:05:13 たしかにwww
14:05:26 テンプレート引数に テンプレート?
14:05:33 なんじゃそりゃ って感じ
14:09:08 List>
14:09:12 とかは書けますよw
14:10:38 んそれは 引数に普通に型を指定しただけじゃろ
14:11:05 Map は実体化された型だよね
14:11:24 template<> class T は実体化された型じゃなくて、
14:11:34 引数をひとつとるテンプレートクラス っていう宣言なんじゃよ
14:13:28 そうですね、普通ですねw
14:14:39 template< template<> class T> class CHoge {};
14:15:22 うに?
14:15:29 の利用場面って、どういう状況なんでしょうか?
14:15:40 たとえば
14:16:47 template< typename T, typename C> class CHoge { T m_t; C m_c; ... };
14:17:00 T は基本タイプで C はコンテナクラスとした場合
14:17:32 typedef CHoge > CHogeTV;
14:17:39 みたいにして実体化するんだけど
14:17:45 char が冗長じゃろ
14:17:49 こんな場合は
14:18:25 template< typename T, template <> class C > class CHoge { T m_t; C m_c; ... };
14:18:29 としておけば
14:18:39 typedef CHoge CHogeTV;
14:18:43 と書けるんじゃよ
14:18:49 な・る・ほ・ど!
14:19:17 これは良いですね
14:19:26 おお
14:19:29 一発で理解したのね
14:19:31 あたまいい
14:19:39 www
14:19:42 ← 最初意味がよくわからなかった
14:19:52 でも、コードの読みやすさの問題はありますね
14:19:56 慣れかな?
14:19:59 慣れじゃな
14:20:19 なるほど
14:20:25 今は 「template <> class C」が
14:20:39 おいらの頭のなかで ひとつのイディオムになったので
14:20:42 見てすぐわかる
14:21:46 なるほど
14:21:58 補足すると
14:22:21 <> のように 引数を省略する記法は VC9 だとエラーになるので
14:22:33 template class C
14:22:47 のように ダミーの引数を書いておかなくてはいけない
14:23:01 最初に これを見たので
14:23:06 もう何がなにやら
14:23:16 class D はどこ行ったの 状態だった
14:23:26 たしかに
14:23:47 さっきのは、Javaですと
14:24:04 public class Hoge {
14:24:07 private T t;
14:24:09 List c;
14:24:13 public Hoge(T t, List c) {
14:24:23 やりなおしw
14:24:26 public class Hoge {
14:24:27 private T t;
14:24:30 List c;
14:24:32 public Hoge(T t, List c) {
14:24:34 this.t = t;
14:24:36 this.c = c;
14:24:39 }
14:24:41 }
14:24:51 こんな感じだと思います
14:24:57 うにゅ
14:25:41
14:25:47 List はコンテナだよね?
14:25:56 そうです
14:26:07 ユーザが List 以外のコンテナを使うときは
14:26:10 どうするの?
14:26:18 なるほどー
14:26:46 template< typename T, template <> class C > class CHoge { ... }
14:26:57 は ユーザがコンテナを選べるんだお
14:28:30 public class Hoge> {
14:28:35 ... }
14:29:01 苦しいけど、、
14:29:06
14:29:17 コンパイラ 通る?
14:30:28 通ります!
14:30:52 おおお
14:30:56 さばらしい
14:31:02 さばらしい!
14:31:11 とかいうようなジェネリック
14:31:19 勉強会はないのじゃろうか・・・
14:31:50 おもしろいですけど・・・
14:32:37 なんかさー
14:32:50 CPP てんぷれーとを使うと
14:33:20 型名に型を代入ができるでしょ
14:33:34 typedef 型 型名;
14:33:42 型にはテンプレートが指定できるので、
14:34:00 これって一種の関数呼び出し&代入なんだよね
14:34:41 なので コンパイル時に 階乗の計算が出来たりする
14:36:00 template = function みたいということですか?
14:36:08 んー
14:36:20 ていうか コンパイル時に実行される
14:36:26 関数型言語 みたいな感じ
14:37:04 コンパイル時" っていうのがポイントなんですよね?
14:37:09 そそ
14:37:20 普通は 実行時に 実行される
14:37:35 でも コンパイル時 に実行ってのは
14:37:41 これまで おいらの頭には
14:37:46 そんな概念はなかったので
14:37:52 かなーり 新鮮
14:38:15 なるほどー
14:40:11 ただ
14:40:21 やっぱり ソースが理解困難になる
14:40:30 慣れが足りない
14:40:39 あと コンパイルエラー が
14:40:42 意味不明 orz
14:43:12 たしかに理解しづらくなるかもですね
14:43:39 コンパイルエラーは、コンパイラにがんばって欲しいですねw
14:45:42 unn
14:45:44 うん
14:46:02 だけど おいらは 諸般の事情で VC6 という 古いの使ってるので
14:46:07 コンパイラに期待できない
14:46:23 静的ソースコートチェッカー が
14:46:37 親切なエラーを出してくれるといいんだけどねー
14:48:32 Checkstyleみたいなのですかね? > ソースコードチェッカー
14:48:52 それはしらないけど
14:49:03 CppLint みたいなの
14:49:07 あ、そうですよね。CheckstyleJavaのです。
14:49:19 なる
14:49:42 探せばあるのかなぁ>テンプレートをさぽーとする CppLint
14:50:10 http://sourceforge.net/projects/cpplint/ すね
14:50:14 (chokan) SourceForge.net: C++ lint: C++ lint [text/html]
14:51:00 おお
14:51:02 http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py
14:51:03 (chokan) [text/plain] 105KB
14:51:10 テンプレートさぽーと してるのかな・・・
14:51:54 cpplint.py は、中身見ると "template" を見てるみたいですけど、
14:52:16 We allow <> for templates,
14:52:21 と 書いてあるけど・・・
14:52:30 (ignoring whatever is between the braces)
14:52:32 だ そうじゃ orz
14:53:22 そうですか...
14:53:30 これでは ViVi に搭載している
14:53:40 C/C++ パーサと変らんぞ
14:53:40 (chokan) C: 10 (10++ 0--)
14:53:52 う また Cをインクリメントしてもうた
14:53:59 C++
14:53:59 (chokan) C: 11 (11++ 0--)
14:58:28 がーん
14:58:32 ViVi がクラッシュした
14:59:02 あらら
14:59:25 あれ
14:59:28 再現しない orz
14:59:55 「136,000./3,589,230 」を計算させてたら さっきは死んだのに
15:00:09 でばっがで やってみよう
15:00:53 おおお
15:01:00 アサーションがでたぞ
15:01:23 いとすばらし
15:06:27 あああ
15:06:43 . がメンバアクセス演算子 と解釈されてる orz
18:50:07 はてなブックマーク - 新着ブックマーク - trac.codecheck.in: CakeOnEmacs - codecheck.in - Trac ( yokochie++ ) [emacs, php, cakephp] - http://trac.codecheck.in/share/wiki/CakeOnEmacs
18:50:07 (chokan) yokochie: 1 (1++ 0--)
18:50:08 (chokan) CakeOnEmacs – codecheck.in [text/html;charset=utf-8]
23:40:09 はてなブックマーク - 新着ブックマーク - trac.codecheck.in:
23:40:10 DrillInstructor – codecheck.in
23:40:11 ( leex40++ ) [emacs] - http://trac.codecheck.in/share/wiki/DrillInstructor
23:40:11 (chokan) leex40: 1 (1++ 0--)
23:40:11 (chokan) DrillInstructor – codecheck.in [text/html;charset=utf-8]