1 名前:前々スレ985 mailto:sage [03/12/18 06:52] 理解できないわけないだろ! デザパタも知らずにC++使いの質を下げるC厨には げんあり 前スレ達 難易度:1 pc2.2ch.net/tech/kako/1058/10586/1058675178.html 難易度:2 1pc2.2ch.net/test/read.cgi/tech/1063323615/
24 名前:デフォルトの名無しさん [03/12/19 01:28] >>22 だから、30歳過ぎて、社会の政治的な要因に太刀打ちできるような 立場になってからもデザインパターンみたいな一技術で重宝されるような 人物に対して「逃げ道だよな」って言ってるの。20代の奴がやりたくてもできないような ところで自分をアピールする術を持ってないのかって。 中堅者のやることっていったら、20代の奴が仕事をしやすいように、いろいろと根回しすることだろ? 年齢重ねても、やることが20代の延長だったら会社に居る意味ねーよ。 スパゲティコードだとか、その辺は中堅社員が口出すことじゃねーって。 むしろ、20代の奴が気付いて、中堅社員に意見をUPして、それから中堅社員が根回しするのが理想。 要は、いい歳こいて低レベルな話してんじゃねーよって。もっと抽象的になれってことだ。
25 名前:22 mailto:sage [03/12/19 01:45] >>24 何で俺にw
26 名前:23 [03/12/19 02:07] >24 俺か?w まだ27なんだけどな。 つーかデザインパターン云々いってる 話はどこからきたわけ??
27 名前:デフォルトの名無しさん mailto:sage [03/12/19 02:16] >>25-26 前スレのコピペだよ。 単なるあげ荒氏だから反応するな。
28 名前:デフォルトの名無しさん [03/12/19 09:48] >>21 プップップ 残念ながら>>17-18 のコメントはSmalltalk解説サイトの前文なのだ(藁 VB厨のようなM$の奴隷の雑魚どもが使う言語C#ごときに出る幕は無い(藁
29 名前:デフォルトの名無しさん mailto:sage [03/12/19 10:15] >>18 >また人間の手によるメモリ管理は、必ずといっていいほどメモリリーク現象を  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ >引き起こします。 書いた奴が、自分の間抜けっぷりを隠す為に 一般化しようとしているとしか思えない。
30 名前:デフォルトの名無しさん mailto:sage [03/12/19 13:26] メモリリークを強調するのって 新言語をC++と比較するときの常套手段だよね。 Cならいざ知らず、C++を然るべき使い方すれば メモリリークなんて滅多に起こさないと思うが。
31 名前:デフォルトの名無しさん mailto:sage [03/12/19 14:13] ポインタに相当するものがあるなら、必ずメモリリークするよ メモリリークするようなコードを書いちゃう人は、 どんなに管理手法を凝らしてもリークさせちゃう。 たとえばGCなんてその注意をほんのちょっと減らすだけでしかない。 にもかかわらず大げさに取り上げたがるのは、 表面的なところにとらわれてるか、初心者かのどっちかだろうねえ。
32 名前:デフォルトの名無しさん [03/12/19 14:35] >>29 > >>18 > >また人間の手によるメモリ管理は、必ずといっていいほどメモリリーク現象を >  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ > >引き起こします。 > > 書いた奴が、自分の間抜けっぷりを隠す為に > 一般化しようとしているとしか思えない。 ではお前は間抜けなことをせずに間違いを一切犯さずに 超超!超!超!超!超!!大規模アプリ開発で ポインタ演算をべらぼーに徹底的に使い切ってコーディングできるか? お前には無理だ。それは、お前が人間だからだ。
33 名前:デフォルトの名無しさん mailto:sage [03/12/19 14:37] >>30 それがしかるべき使い方をする香具師がほとんどいないんだからねえ。 速度を強調するにはどうしても避けられない問題につきあたるわけよ
34 名前:デフォルトの名無しさん mailto:sage [03/12/19 14:54] > 超超!超!超!超!超!!大規模アプリ開発で > ポインタ演算をべらぼーに徹底的に使い切ってコーディングできるか? できるよ。 規模が大きかろうが小さかろうが、 しかるべきサイズのモジュールやコンポーネントに分割して開発するだろ。 この「しかるべきサイズ」の条件として、「ポインタが安全に使える」 というのがあるだけの話。さらに言うなら、条件の一つでしかないし、 それほど重要じゃない。
35 名前:いちゆ [03/12/19 15:02] C#はいまだにポインタ型が使えるんだが、 あれはどぅだ?
36 名前:デフォルトの名無しさん mailto:sage [03/12/19 17:17] っていうかおまえらC++じゃなくてCのポインタをイメージ してないか?Cのポインタは怖い。キャストとか特に。 C++だとauto_ptrやクラスでラップできるしね。 で、普段C++な俺がCでWinドライバ作成してるわけだが、 緊張感が違うな(w
37 名前:Kusakabe Youchien mailto:sage [03/12/19 17:49] >>36 こわがりすぎー
38 名前:デフォルトの名無しさん mailto:sage [03/12/19 18:06] >>27 いや、分かってるがワロタ
39 名前:デフォルトの名無しさん mailto:釣れますか?('A`) sage [03/12/19 21:05] メモリーリークってJavaだってたいしてかわらんだろ? 使えるだけ使いまくって足りなくなったらいらない メモリを開放してるんだから。 まぁ、要するにJavaはメモリ食い杉。
40 名前:sage mailto:sage [03/12/19 21:21] GCがあったってリークさせるやつはさせるさ。 リークを完全になくすには例外安全を貫く必要がある。 過剰な例外安全の保証を行うと、性能面でのC++のメリットがなくなる。 そのあたりのトレードオフの存在が、C++のいいところでもあり悪いところでもある。
41 名前:デフォルトの名無しさん mailto:sage [03/12/20 11:31] >>36 緊張感が違えば十分だが Cのソースのメンテの場合などは あきらめでいっぱいになる事もある。
42 名前:Java最強 [03/12/29 20:19] C++は列挙型なんて時代遅れのものがついてる欠陥品
43 名前:デフォルトの名無しさん [03/12/29 22:05] おまえらマジでC言語のポインタで挫折したの?
44 名前:デフォルトの名無しさん mailto:sage [03/12/29 22:19] abc.exeという実行ファイルがあったとして この実行ファイルの引数がどうなっているか調べる方法はありますでしょうか? もしくはそれがわかるソフトでもかまいません。 よろしくお願いします。
45 名前:デフォルトの名無しさん mailto:sage [03/12/29 22:29] リファレンス(T&)渡しを的確に使用している奴はいるのか。 ポインタ渡しを使った場合と効果は同じだけど、 引数で渡すデータを変更しない場合は、リファレンスを使い、 値を変更する場合はポインタを使うようにしているのだが、 それ以外で適切な使い方を知っている猛者はご教授願いたい。 (コピーコンストラクタやoperator関数の引数ってのはなしで。)
46 名前:デフォルトの名無しさん mailto:sage [03/12/29 22:33] >>45 中学生。
47 名前:デフォルトの名無しさん mailto:sage [03/12/30 01:29] >>45 たとえばあるオブジェクトを指すクラスを作るときで、 そのオブジェクトをコンストラクタ以外では指定できないようにしたいとき、 参照型のメンバ変数とすることがとても有効な場合がある。
48 名前:sage mailto:sage [03/12/30 02:47] 適切、かどうかは判断しがたいが templateをぽちぽちいじるようになれば、リファレンスは避けて通れなくなる。 いちいちポインタを要求するtemplateってのは使いづらいからね。
49 名前:デフォルトの名無しさん mailto:sage [03/12/30 03:56] >>45 More Effective C++でも嫁
50 名前:デフォルトの名無しさん mailto:sage [03/12/30 06:42] >>45 >引数で渡すデータを変更しない場合は、リファレンスを使い、 変更するかしないかはconstの有無で判断するもんだと思う。 ポインタでもリファレンスでも。
51 名前:デフォルトの名無しさん mailto:sage [04/01/03 22:52] てかこのスレの住民は(>>48 以外?)モダーン本も読んでないのか? TypeTraitsで適切な引数型を自動的に検索できるのは 参照型のシンタックスがコピー渡しと同じだからだろうが。
52 名前:デフォルトの名無しさん mailto:sage [04/01/04 00:44] テンプレート関係の勉強をしようにも、 頭が悪いので理解できない。 初心者用の本だとスタッククラスに対して、 int型やchar型をテンプレート引数にとる簡単な例ばかりで、 応用例は、ほとんど載ってない。 標準ライブラリとテンプレートのからみを説明している本は、 中級者以上の本ばかりなので、難しくて理解できない。 (特にsetやlistテンプレートの実装部分とかの説明が理解不能) この辺のからみについて、何かわかりやすい本or 最適な勉強法はあるのでしょうか。
53 名前:デフォルトの名無しさん mailto:sage [04/01/04 01:07] >>52 ttp://www.amazon.co.jp/exec/obidos/ASIN/0201734842/ 試しにこれ読んでみれ。
54 名前:デフォルトの名無しさん mailto:sage [04/01/04 01:09] 俺はlistやhashtableを実装(再発明)したよ。 lokiやboostのコードを読み漁りながらだったんだけど、 type traitsやfunctionalなんかが中心だったかなあ。 カナーリ勉強になったよ。
55 名前:デフォルトの名無しさん mailto:sage [04/01/04 02:46] 「JavaプログラマーのためのC++」ってないかね。 JavaのStringやVectorと対比させてSTLを教えてほしい。 newとdeleteの管理をちゃんとやるための設計のしかたとか。
56 名前:デフォルトの名無しさん mailto:sage [04/01/04 10:46] newとdeleteの管理すらできないうちからSTLに手を出したりするから C++がわからなくなる。 テンプレート(機能)は鬼門なので他が十分に理解できるまでとっておく。 STL(ライブラリ)はもっと鬼門なのでテンプレートが十分に理解できるまでとっておく。 あとは車輪の再発明はC++の学習には欠かせない要素。 自分で作ってはじめて理解できる。それがC++。
57 名前:デフォルトの名無しさん mailto:sage [04/01/04 21:51] 読む→試す→作る→だから身につく
58 名前:デフォルトの名無しさん mailto:sage [04/01/05 01:15] どこかで見たことあるモンクだと思ったら… そんなにこわがることないのにー ;-p
59 名前:デフォルトの名無しさん mailto:sage [04/01/06 11:58] >>56 STL(あるいはその再発明)を使わなけりゃ例外安全な deleteの管理なんて出来ないだろうが。
60 名前:sage mailto:sage [04/01/06 22:48] >>59 そんなことはないない
61 名前:デフォルトの名無しさん mailto:sage [04/01/07 02:13] 出来ないというか、やる気はせんな。
62 名前:デフォルトの名無しさん [04/01/11 21:41] >>59 auto_ptrはSTLじゃありませんが何か?
63 名前:デフォルトの名無しさん mailto:sage [04/01/11 21:46] やっぱり安全なdeleteの管理はできそうもないな。 なぜならauto_ptrはSTLだからね。
64 名前:デフォルトの名無しさん [04/01/12 00:25] GNU関係のプログラム書いてたら99%はANSI Cだから素のポインタ操作も 最初は苦しむが慣れたら明確かつ究極的なインタフェースとして使えるよ。 サーバ系で一リクエストに何千回も処理する箇所があればオブジェクト指向系 の糞重い&メモリ食いな処理は命取りになる。 そういう時にポインタでデータをきちきちに詰める。 1バイト単位できっちり。 JAVAやC#みたいなインタプリタと違って最適化やVMも必要ないから 十分なパフォーマンスが得れる。 だが熟成には何年何ヶ月と要するよね。 適材適所があるわけだから一概にC++はダメって言い切るのはどうなのかな?
65 名前:デフォルトの名無しさん mailto:sage [04/01/12 00:52] C# はインタープリタじゃないわけだが。 Java も最近 JIT 方式のものがあったりするし。 揚げ足取りスマソ。
66 名前:デフォルトの名無しさん [04/01/12 01:12] やっぱし テンプレートは理解しておいた方がいいのかなぁ。 難しい..
67 名前:デフォルトの名無しさん mailto:sage [04/01/12 01:16] >>66 最低限、STL のコンテナが使えれば OK だと思う。 それが出来たら Modern C++ Design でも読みつつ Loki の内容理解とか。
68 名前:デフォルトの名無しさん [04/01/12 01:17] >67 了解。頑張ります。
69 名前:デフォルトの名無しさん [04/01/12 01:21] .NET自体がおおざっぱに捉えてインタプリタだと思うんだが。
70 名前:デフォルトの名無しさん [04/01/12 01:24] >>69 修行が足りん 出直してこい
71 名前:デフォルトの名無しさん [04/01/12 01:25] >>70 C#とかJAVAって386コード吐けるんですか?
72 名前:デフォルトの名無しさん mailto:sage [04/01/12 01:41] >>71 JIT コンパイルで検索しる。
73 名前:デフォルトの名無しさん mailto:sage [04/01/12 04:25] >>67 テンプレートは template< typename T >くらいなら分かるけど、 template< int n >とか見てボカーンでした。 あと、 template<class T> class shared_ptr { (略) template<class Y> explicit shared_ptr(Y * p): px(p), pn(p, checked_deleter<Y>()) // Y must be complete { detail::sp_enable_shared_from_this(p, p, pn); } も全然理解できません。 template<class Y>って・・・・ shared_ptrってTのポインタを抱えるクラスだと思うけど どうしてYが出てくるのやら・・・ いい解説ページか本はないでしょうか。
74 名前:デフォルトの名無しさん mailto:sage [04/01/12 04:29] それどころか、Modern C++ Designの表紙をめくったところで template<int m1, int l1, int t1, int m2, int l2, int t2> Physical<m1+m2, l1+l2, t1+t2> operator*(Physical<m1,l1,t1> lhs Physical<m2,l2,t2> rhs ) { return Physical<m1+m2, l1+l2, t1+t2>::unit*lhs.value()*rhs.value(); } がいったいなんのことやら、と。
75 名前:デフォルトの名無しさん mailto:sage [04/01/12 07:46] >いい解説ページか本 Modern C++ design しかない! >>74 そのテンプレートはModern本を読み進めて行かなければ ほぼ理解不能だと思われる。 loki風のテンプレートの用法に慣れちゃえば 極めて普段どおりのやり方になるので、まずはModernの読破を。
76 名前:デフォルトの名無しさん mailto:sage [04/01/12 15:57] >>73 shared_ptr の コンストラクタにある、template< class Y > は、 shared_ptr< void* >( new Object() ); とかやっても きちんと Object のデストラクタを呼び出すための仕掛け。 大雑把に書くと以下のようなコード。 struct deleter_base { virtual void destroy() = 0; virtual ~deleter_base(){} }; template< class T > struct deleter : public deleter_base { deleter( T * p ) : p_(p) void destroy() { checked_delete( p_ ); } T * p_; }; struct shared_count { template< typename Y > shared_count( Y * p ) : pd_( new deleter<Y>( p ) ) ... { ... } // カウンタが 0 を示したときに pd_->destroy を呼ぶような処理 // これで、Y は正しく delete される。 deleter_base * pd_; }; みたいなの。
77 名前:デフォルトの名無しさん mailto:sage [04/01/13 23:13] templateをしっかり学習したければHaskellを 覚える事をお勧めする。
78 名前:デフォルトの名無しさん mailto:sage [04/01/14 09:57] >>77 TypeListを処理するのに再帰を使用するとかが 関数型言語っぽいっていう理解はOK? その他、あれば解説よろしく
79 名前:デフォルトの名無しさん mailto:sage [04/01/14 13:50] >>78 アダプタとか関数オブジェクト廻りの技術が関数型っぽい。 あと演算子のオーバーロードも関連も型クラスとの関連が。 後、boostとかだとそのままずばりlambdaがある。
80 名前:デフォルトの名無しさん mailto:質問age [04/01/16 18:07] まだ勉強中なんでツッコミ歓迎。 C++のtemplateとかoperatorって>>73 ,76みたいな 「きちんと面倒見るためにはそこまでしなきゃ(考えなきゃ)いけないのかよ」 ていうのが実務上嫌いなんだが、反面そこが趣味的には面白かったりする。 やっぱり簡単な使い方以外のC++はヲタク用言語という感じがぬぐえない。 で、ちょっと質問。 ランダムアクセス可能なiteratorで出力を加工することは可能かどうか。 template< class T > my_iterator { private: T * current; public: T & operator*(){ return *current; } }; 関係の無いところを端折ると上のように書いているんだが、例えば public: T & operator*(){ return 1 + *current; } は戻り値がT&だから出来ない。かといって戻り値をTにすると代入が出来ない気がする。
81 名前:デフォルトの名無しさん mailto:sage [04/01/16 18:20] >>80 すぐ考え付くのは、 template <class T> my_iterator { private: T * currrent; struct T_ref { T_ref(T &r) : ref(r){} operator T() {return ref + 1;} template <typename U> T_ref &operator=(const U &u) {ref = u; return *this;} T &ref; }; public: T &operator*() {return T_ref(*current);} }; 色々問題がありそうだが。
82 名前:デフォルトの名無しさん mailto:sage [04/01/16 18:52] >>81 operator T()なんて使い方が出来るのか。サンクス。 ただ加工に使う「+ 1」の値がmy_iteratorに入ってると T_refのメンバにmy_iteratorへの参照も入れなくちゃいけなくて複雑になりそうだな。 そもそも加工をoperatorに頼っちゃいけないのだろうか。
83 名前:デフォルトの名無しさん mailto:sage [04/01/17 00:29] プロキシオブジェクト使わないと厄介なところだな。 「参照じゃないと書き換えられない」みたいな問題は More Effective C++(だっけ)の二重配列クラスの実装なんか まさしく参考になると思う。
84 名前:hiraoka [04/01/20 02:12] >>76 補足すると、継承したクラスのポインタに対応するため。 >>80 boost::transform_iteratorがおすすめ。 自分で書きたければ、 T& operator*()と T operator*() constを定義する方法もあると思う。
85 名前:hiraoka [04/01/20 02:13] >>76 補足すると、継承したクラスのポインタに対応するため。 >>80 boost::transform_iteratorがおすすめ。 自分で書きたければ、 T& operator*()と T operator*() constを定義する方法もあると思う。
86 名前:デフォルトの名無しさん mailto:sage [04/01/20 04:48] hp.vector.co.jp/authors/VA000092/jokes/strup.html
87 名前:デフォルトの名無しさん mailto:sage [04/01/21 00:27] 「C++は難しすぎ」 byコンパイラメーカ一同
88 名前:デフォルトの名無しさん mailto:sage [04/01/21 18:41] コンパイラ屋さんってC++コンパイラを書くときに言語は何を使ってるんですかね? Cなのかな?C++なのかな? Cだと大変そうですね。
89 名前:デフォルトの名無しさん mailto:sage [04/01/21 21:58] 最初のC++はCに変換するプログラムで、Cで書かれていたそうだ。 最初のCはアセンブラで書いたそうだ。 最初のアセンブラは機械語で書かれた。バイトコードに直すのは人力でやった。 最近の商用のは知らんが、ほとんどCで書かれているんじゃないか?
90 名前:デフォルトの名無しさん mailto:sage [04/01/22 00:47] “yacc”とか“コンパイラコンパイラ”でぐぐれ。
91 名前:デフォルトの名無しさん mailto:sage [04/01/22 07:03] まともなエラー処理を書こうと思ったらyaccじゃ無理だろ。
92 名前:デフォルトの名無しさん mailto:sage [04/01/22 16:16] まあ、yaccはあくまでコンパイラ作成を支援するものだし。
93 名前:デフォルトの名無しさん mailto:sage [04/01/22 16:34] じゃあなんでコンパイラ・コンパイラなんて大仰な名前がついてるんだ?
94 名前:デフォルトの名無しさん mailto:sage [04/01/22 17:45] pc2.2ch.net/test/read.cgi/tech/1070089173/ 続きはこちらでどうぞ。
95 名前:73 mailto:sage [04/02/01 17:05] >>75 ,76,77 急に忙しくなってレスが遅れましたが、参考になりました。 ありがとうございます。
96 名前:自称C++厨をクビにせよう運動 [04/02/09 10:20] グゴゴゴゴゴ!!! いまこそ、プログラマ革命を起こすときだ! (亜ぼーんする愚か者には核ミサイル無量大数本分の死を!) 〜 自称C++厨の化けの皮をはがせ!運動展開中! 〜 (本当は自称C++厨なんてたいしたことがない、上辺だけなのだ! 真実を見よ!) 大半のC++厨はインチキ詐欺師の卑怯者! オブジェクト指向も知らなければデザインパターンも知らない悪い奴である。 しかも悪名高いウォータフォール信者と来た! 許せん! 今こそ正義の一撃を! 大半のC++厨は汚いコードを書いてチームをわざと混乱させメンテナンスの手間を増大させる悪魔なのだ! 大半のC++厨は自己保守的で官僚的で革新性が無く 自分のスキルの程度を誤魔化すためにわざとソースコードを読みにくくしているのだ! (こいつらはわざと読みにくくすれば他人が解読するのにに手間がかかるので 凄いと思いこまれると勘違いしている馬鹿どもなのだ) こんな卑怯者が許されるか! 蓋を開けてみればただのC言語しかできないとんでもない低脳である。 こんな悪魔のような給料泥棒なやつが金をもらっていることは絶対に許されるべきではない! 即刻減給するかクビにしてやるべきである! このような卑怯なC++厨の行為は宣戦布告と見なさなければならない行為であり 大義名分を持って即刻解雇すべきである! 自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ! 正義は勝つ!悪の枢軸・自称C++プログラマをこの世から抹殺せよ!
97 名前:デフォルトの名無しさん mailto:sage [04/02/09 11:08] >>96 暴れるのはマ板だけにしとけ知的障害者。
98 名前:デフォルトの名無しさん [04/02/09 19:38] >>96 ただのC言語すらできないヒトは どうすればいいですか?
99 名前:デフォルトの名無しさん mailto:sage [04/02/09 19:42] >>98 それは俺様のことか?
100 名前:デフォルトの名無しさん mailto:sage [04/02/09 19:50] >>98 (゚Д゚) >>99 そうだ
101 名前:デフォルトの名無しさん mailto:sage [04/02/10 01:39] >>96 おまえもHaskelとかScheme勉強しろよ。
102 名前:デフォルトの名無しさん mailto:sage [04/02/10 02:20] HaskelやSchemeを勉強しても仕事の役に立つとは思えない
103 名前:デフォルトの名無しさん mailto:sage [04/02/10 02:39] デザインパターン勉強しても仕事の役立つとはおもえない。
104 名前:デフォルトの名無しさん mailto:sage [04/02/10 02:49] Modern C++ Designが仕事の役に立つとは思えない。
105 名前:デフォルトの名無しさん mailto:sage [04/02/10 03:04] 仕事が俺の役に立つとは思えない。
106 名前:デフォルトの名無しさん [04/02/11 18:52] 松戸ナルドがおいしいとは思えない。
107 名前:デフォルトの名無しさん mailto:sage [04/02/11 18:55] 松戸にもマクドナルドがあったのか
108 名前:デフォルトの名無しさん mailto:sage [04/02/11 20:55] イノセンス、それは いのき
109 名前:デフォルトの名無しさん [04/02/11 23:34] 土佐、それは高知
110 名前:デフォルトの名無しさん [04/02/12 00:50] 北関東の県が必要だとは思えない。
111 名前:デフォルトの名無しさん mailto:sage [04/02/12 12:15] >>110 群馬 栃木 茨城というわかりやすい駄目トリオがなくなると、 神奈川 埼玉 千葉のどんぐりの背くらべトリオによる No2争いが激化する。
112 名前:デフォルトの名無しさん mailto:sage [04/02/12 13:35] 横浜>神奈川 ディズニーランド>千葉 さいたま>埼玉
113 名前:デフォルトの名無しさん mailto:sage [04/02/15 22:15] >>107 あるよ。まんまえに。いってみ
114 名前:デフォルトの名無しさん mailto:sage [04/02/22 21:06] テムプレートってどういうときに使うんでつか? 難しすぎて頭がおかしくなります。 たとえば1から100まで足すプログラムに使いませんよね?
115 名前:デフォルトの名無しさん mailto:sage [04/02/22 21:14] 使えますが
116 名前:デフォルトの名無しさん [04/02/22 21:18] #include <iostream> template <int n> struct Sum { enum { X = Sum<n-1>::X + n }; }; template<> struct Sum<1> { enum { X = 1 }; }; int main() { std::cout << Sum<100>::X; return 0; }
117 名前:デフォルトの名無しさん mailto:sage [04/02/22 21:19] >>2 15歳ですべて悟った俺は変人でしょうか
118 名前:デフォルトの名無しさん mailto:sage [04/02/22 21:47] テンプレートを使いこなしたかったら Modern C++ Design を読むべし、そうしなければ全く始まらない。 テンプレートはOOその他従来のパラダイムのように、プログラムを書くための物ではない(もちろん使えるが、そういうやり方は古いやり方) Modernなテンプレートプログラムとは、プログラムを生成するプログラムを書くのだ。 例えばデザインパターンのパターンを見て、そのパターンを実装するのが従来のやり方。 テンプレートを使う場合は、そのパターンを生成するプログラムを書くのだ。 一つ上のステージからプログラムを見下ろす様にプログラムをするんだ。
119 名前:名無し募集中。。。 mailto:sage [04/02/22 22:01] >>115-116 それは1から100まで足すプログラムというより、 1から100まで足してある数値を取り出すプログラムでは?
120 名前:デフォルトの名無しさん mailto:sage [04/02/22 22:17] 実行時に足すかコンパイル時に足すかの違いでしかない。
121 名前:デフォルトの名無しさん mailto:sage [04/02/22 22:30] コンパイラに足させるプログラム
122 名前:デフォルトの名無しさん mailto:sage [04/02/22 22:37] template<int i> class sum { public: int operator() { return i + sum<i - 1>()(); } }; template<> class sum<1> { public: int operator() { return 1; } }; じゃあこうすれば良いのか
123 名前:デフォルトの名無しさん mailto:sage [04/02/22 22:55] >>122 オプティマイズがかかったらやっぱりコンパイル時に足していそうだな(藁
124 名前:デフォルトの名無しさん mailto:sage [04/02/22 23:22] オプティマイズは考えなくていいんじゃないか? 設定やコンパイラによっても違うし。 コンパイル時に計算させるか、実行時に計算させるかの意図がコードに現れてればいいんじゃないかな。