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/
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] オプティマイズは考えなくていいんじゃないか? 設定やコンパイラによっても違うし。 コンパイル時に計算させるか、実行時に計算させるかの意図がコードに現れてればいいんじゃないかな。
125 名前:デフォルトの名無しさん mailto:sage [04/02/22 23:31] どうしてもというのなら template<int i> class sum { volatile int v; public: sum() : v(i) { } int operator() { return v + sum<v - 1>()(); } };
126 名前:デフォルトの名無しさん mailto:sage [04/02/22 23:32] sum<i - 1>()(); こうじゃなきゃだめだな
127 名前:デフォルトの名無しさん mailto:sage [04/02/22 23:35] おまいら >>114 の質問に答えてないよ。 「使いませんよね?」と聞いているのに、「使える」という答えはおかしい。 いつもそうゆうコードを書くかどうかを聞いているので、可能不可能を聞いているのではない。 漏れの答えは、そんなことには多分使わない。
128 名前:デフォルトの名無しさん mailto:sage [04/02/23 00:28] どうでもいいけど、 int operator() { の宣言は、 int operator()() { でないとコンパイル通らなくないか? 勘違いだったらスマソ
129 名前:デフォルトの名無しさん mailto:sage [04/02/23 00:34] yes
130 名前:デフォルトの名無しさん mailto:sage [04/02/23 00:40] >>127 どう使うかって事にもよるね、例えばその計算結果から型を選択するとかいった処理なら テンプレートを使うしかないし・・・ 最近はJavaやC#の場合、リフレクションとかもあるので無茶な事をすれば実行時にもできるかもしれんが、余りやりたくは無いねぇ。
131 名前:デフォルトの名無しさん mailto:sage [04/02/23 00:45] リフレクションいいよね。 C++で実現したいんだけど、どっかに参考になるコードないかなぁ。
132 名前:デフォルトの名無しさん mailto:sage [04/02/23 08:37] むかーしリフレクションっぽいコードをC++で書いた。 お前のコードじゃねえだろどこで派食ったといわれて結構へこんだ。 まああれだ、スマートに書くか効率良く書くかの二者択一になるからやめとけ。
133 名前:デフォルトの名無しさん mailto:sage [04/03/01 13:32] C++厨のレベルの低さが垣間見えるスレですね
134 名前:デフォルトの名無しさん [04/03/03 18:26] これからなんだよ、まだこれからこのスレはすんげぇ面白くなるんだよきっと。 きっと1さんがこのスレを優良スレにしてくれるんだよ。 1さんがこのスレを名スレにしてくれるんだよ。 1さんが素晴らしいネタを提供してくれるんだよ。 だからみんな、これからの1さんの書き込みを楽しみにしようよ。 これからこれからこれからこれからまだまだまだまだ…
135 名前:デフォルトの名無しさん [04/03/04 18:37] 1さんって俺じゃねーか。おまえらまだスレの連番付け間違えた事チマチマ恨んでるのか? でもせっかくだから盛り上げていくか? >>133 а≧○иξ⊃XγΘ△Φ?
136 名前:デフォルトの名無しさん [04/03/04 19:09] >>135 a=$д゜【@()πr2+3.14
137 名前:デフォルトの名無しさん [04/03/05 23:13] >>136 Пкδ\Δν⊃∃ю!
138 名前:デフォルトの名無しさん [04/03/06 02:10] >>114 『Effective C++』の41項参照。 例えばWin32の各種ハンドル型をデストラクタでクローズするラッパクラスを作るときに使った。 型は違う(HANDLE・HINTERNET・SC_HANDLEなど)。でも処理は同じ(最後にクローズする)。 『Modern C++ Design』の書き方を許してくれる職場は少ないと思う。 理解できる人間がいなくてメンテナンス性が下がるため。(理解さえできていれば本当は上がってるんだけどね。) そういうときは仕方ないので宣言マクロ/実装マクロにする。それなら理解できる人も多い。 あとは標準ライブラリのコレクションを使えないときに(車輪を再発明するために)使った。 このときはメモリの動的確保をしないという制限があった。 (Allocatorを書く方法もあるが、上と同じ理由でそれが許されることは少ないと思う。)
139 名前:デフォルトの名無しさん mailto:sage [04/03/07 20:04] >Allocatorを書く方法もあるが、上と同じ理由でそれが許されることは少ない 随分厳しいですな もうちょっと分りやすい構造になればいいんですがね > template 漏れはもう boost から戻れない体になってしまいました。
140 名前:デフォルトの名無しさん [04/03/15 11:12] 三大悪の枢軸国の紹介 C++帝國(北朝鮮) ← C++厨代表の正体は、何と! 金正日だった! VB帝國(イラン) ← VB厨代表はイランに潜伏していいた! Perl帝國(イラク) ← Perl厨代表フセインがついに逮捕された!
141 名前:デフォルトの名無しさん mailto:sage [04/03/15 13:59] >>140 C++が分らなくて火病でも起こしたか?
142 名前:デフォルトの名無しさん mailto:sage [04/03/18 16:38] Java帝国(オウム) ← Java厨代表は何と!地図夫(趣味:ソフマップ通い)だった!
143 名前:デフォルトの名無しさん [04/03/29 19:49] 鯖削除は難しすぎ
144 名前:デフォルトの名無しさん [04/04/02 08:21] Modern C++ Designって簡単なことしか書いてないのにね。 それを難しいというのはよほどの馬鹿なんだろうね。 そんな馬鹿がソフトウェア開発にたずさわるのは社会的な悪だね。 医者だと無免許医は摘発されるのに 自動車だと無免許運転は摘発されるのに プログラマーだけ低能でもやっていけるというのが諸悪の根源。 C++難しいとかいう脳障害の低能は そもそもプログラミングに向いてないんだから とっとと転職しろっつーの。
145 名前:デフォルトの名無しさん mailto:sage [04/04/02 09:01] >プログラマーだけ低能でもやっていけるというのが諸悪の根源。 大工よりまし。
146 名前:デフォルトの名無しさん mailto:sage [04/04/02 09:32] >>144 > 医者だと無免許医は摘発されるのに > 自動車だと無免許運転は摘発されるのに ま、低能が免許持ちまくりなんだけどな、どっちも。
147 名前:デフォルトの名無しさん [04/04/02 10:18] 確かに免許制にして一定水準以上の者でないと開発に関われないとしてもいいかな。 その方が学ぶ側も採用する側も分かりやすくていいと思う。
148 名前:デフォルトの名無しさん mailto:sage [04/04/02 11:27] >>146 なんなら私が手術してあげましょうか?
149 名前:デフォルトの名無しさん mailto:sage [04/04/02 21:40] C++は難しくないけどC++厨はオナニーしすぎ
150 名前:デフォルトの名無しさん mailto:sage [04/04/02 22:37] またわけのわかんないレスが来たな
151 名前:デフォルトの名無しさん mailto:sage [04/04/03 15:52] 難しいかどうかなんて問題じゃないんだ。 問題は出来るか出来ないかだろ? ま、簡単だと言ってる奴ほど実は何も出来ない というのはよくあるけどな。
152 名前:デフォルトの名無しさん mailto:sage [04/04/04 08:53] ペーパードライバーならぬペーパープログラマーだな
153 名前:ラインプリンタ mailto:sage [04/04/04 09:23] 呼んだ?
154 名前:デフォルトの名無しさん [04/04/21 05:09] 普通、電気系のエンジニアはソフト"も"書けるがソフト屋はソフト"しか"書けないんだろ? ちゃんちゃらおかしいね。それでもエンジニアか?あぁ? ソフトぐらい文系あがりのねぇちゃんでも書くぜ。 人生の敗北者が下る職業 タクシー運転手,塾の講師,ソフト屋 だろ?
155 名前:デフォルトの名無しさん [04/04/21 05:31] ↓アビバ資格者
156 名前:デフォルトの名無しさん mailto:sage [04/04/21 09:59] >>154 は、あまり難しいコードを見たことがないそうです。
157 名前:デフォルトの名無しさん mailto:sage [04/04/21 20:12] ここで俺の登場!!!
158 名前:デフォルトの名無しさん mailto:sage [04/04/22 11:48] と言われても…どちら様?
159 名前:デフォルトの名無しさん mailto:sage [04/04/22 16:38] そのおかたをどなたとこころえる!?
160 名前:デフォルトの名無しさん mailto:sage [04/04/23 20:30] 1ですね。
161 名前:デフォルトの名無しさん [04/04/28 22:53] page4.auctions.yahoo.co.jp/jp/auction/d47227135
162 名前:デフォルトの名無しさん mailto:sage [04/04/28 23:06] OL50人
163 名前:デフォルトの名無しさん mailto:sage [04/04/28 23:10] 難しいプログラムならバカでも書ける。 いかにサボり、楽をするために間単に書くかが私の人生のスタンスと一致していてすばらしい。
164 名前:デフォルトの名無しさん mailto:sage [04/04/29 23:48] >>147 学生さん? 現場じゃそんな子と逝ってられませんよ?
165 名前:デフォルトの名無しさん mailto:sage [04/04/30 14:35] C++はメモリ管理機構がないからムズカシイとかよく言われるけど、 言語側が暗黙のうちにGC用意してくれるよりもライブラリとして用意されるべきなんじゃないかな と最近思うんだけどどうなんだろ。 影でこそこそ処理されると気持ち悪い。
166 名前:デフォルトの名無しさん mailto:sage [04/04/30 15:05] ライブラリとして、だと 「わざわざ使わないといけない」だから 面倒な人間は何をしてくれるか予想がつかない。
167 名前:デフォルトの名無しさん mailto:sage [04/04/30 18:00] つかjava使ってて思ったのが _| ̄|○ < 頼むから、俺にメモリ解放処理をさせてくれ だった。
168 名前:デフォルトの名無しさん mailto:sage [04/05/01 02:28] これからコンパイル後がどうなるかなんて何も考えずに、やらせたい処理だけ 便利なAPI使って記述すればいいって時代が到来するんだろうな。 低レベルな処理なんて組み込みだけ・・なんてことになるのかなぁ。 C++でハァハァする奴にとってはツマラナイ世界かも。
169 名前:デフォルトの名無しさん mailto:sage [04/05/01 10:41] メモリ管理を自分でしないと気持ち悪いって人はあれかな、 実生活でもマメに掃除とかする香具師? 俺みたいに部屋は散らかし放題で 極限まで汚れたら渋々掃除するタイプはダメだ。 取ったメモリの解放まで面倒見てらんねえ。
170 名前:デフォルトの名無しさん mailto:sage [04/05/01 10:58] >>169 漏れの場合,部屋は散らかりまくりだがヒープは絶対片付ける.
171 名前:デフォルトの名無しさん mailto:sage [04/05/01 11:27] 俺は後々片付けるのが嫌で 物理的な参考書とか資料とか極力本棚から持ち出さない人。
172 名前:デフォルトの名無しさん mailto:sage [04/05/01 16:38] 散らかっているかどうかよりもむしろ、物の位置や処遇が 「自分の手の内に入って」いないと気が済まないかどうか、に近い気が。
173 名前:デフォルトの名無しさん [04/05/01 20:15] >>165 >影でこそこそ処理されると気持ち悪い。 高級言語は、多かれ少なかれどこか影でこそこそやってます。 本当にそれが嫌なら、アセンブラで組めw
174 名前:デフォルトの名無しさん mailto:sage [04/05/01 21:20] >>173 そうとも限らないだろ。
175 名前:デフォルトの名無しさん mailto:sage [04/05/01 22:03] >>174 どういうところが限らないんですか? 内容無しの反論なら誰でも出来ます。