1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:11:32] C++ のジェネリックプログラミングの話をしましょう。 以下のスレッドを統合するスレです。 STLスレッド Part1 pc.2ch.net/tech/kako/1004/10042/1004287394.html Part2 pc3.2ch.net/tech/kako/1026/10267/1026793823.html 【C++】Boost使い集まれ! pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?) Generic Programming with C++ Template pc.2ch.net/tech/kako/1008/10085/1008593126.html 【C++】template 統合スレ -- STL/Boost/Loki, etc. pc2.2ch.net/tech/kako/1037/10377/1037795348.html 【C++】template 統合スレ -- Part2 pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち) 【C++】template 統合スレ -- Part3 pc5.2ch.net/test/read.cgi/tech/1066493064/ (html化待ち) 【C++】template 統合スレ -- Part4 pc5.2ch.net/test/read.cgi/tech/1083550483/ (html化待ち) 【C++】template 統合スレ -- Part5 pc5.2ch.net/test/read.cgi/tech/1091522597/ 関連スレ、その他リンクは >>2-5 あたりに。
355 名前:デフォルトの名無しさん mailto:sage [05/03/02 01:29:19 ] Modern ね
356 名前:デフォルトの名無しさん mailto:sage [05/03/02 12:31:04 ] スマソ
357 名前:デフォルトの名無しさん mailto:sage [05/03/08 02:55:11 ] AdobeのASLもここでいいんかな?
358 名前:デフォルトの名無しさん mailto:sage [05/03/08 10:23:35 ] 使われているプログラミング技法を語るならここかな あるいはBoostスレか
359 名前:デフォルトの名無しさん mailto:age [05/03/09 18:17:53 ] 以下のコードで complex を set に入れようとしたところ、 「stl_function.h:197: error: no match for 'operator<' in '__x < __y'」 とか言われてしまうのですが (g++ 3.3.3)、原因が分かりません。 何がおかしいのでしょうか。 #include <complex> #include <set> using namespace std; bool operator<(const complex<int> &a, const complex<int> &b) { return real(a) < real(b) || (real(a) == real(b) && imag(a) < imag(b)); } int main() { set<complex<int> > s; s.insert(complex<int>(1, 2)); return 0; }
360 名前:デフォルトの名無しさん mailto:sage [05/03/09 18:39:00 ] >>359 <set>の中からそのoperator<()が見えていない。しかしoperator<()を #includeよりも前に持ってくると今度はcomplexが定義されていない。 しかしstd名前空間内部のものを先行宣言することは許されていない。 自分で関数オブジェクトを定義するしかない。
361 名前:デフォルトの名無しさん mailto:sage [05/03/09 18:40:16 ] namespace std { bool operator<(const complex<int> &a, const complex<int> &b) { return real(a) < real(b) || (real(a) == real(b) && imag(a) < imag(b)); } } で通ったけど、これってやっていいことだっけ……?
362 名前:デフォルトの名無しさん mailto:sage [05/03/09 18:56:02 ] >>360 > <set>の中からそのoperator<()が見えていない。 これは関係ない。どうせグローバルのoperator<は使われない。
363 名前:デフォルトの名無しさん mailto:sage [05/03/09 19:00:21 ] >>361 結論:ダメ 宣言や定義をstd名前空間に加えてはならない。今回の場合、struct std::less<>の特殊化も考えられるが、後述の規定によりuser-definedな名前で 特殊化しない限りundefined behaviorとなる。 17.4.3.1 Reserved names -1 It is undefined for a C++ program to add declarations or definitions to namespace std or namespaces within namespace std unless otherwise specified. A program may add template specializations for any standard library template to namespace std. Such a specialization (complete or partial) of a standard library template results in undefined behavior unless the declaration depends on a user-defined name of external linkage and unless unless the specialization meets the standard library requirements for the original template.
364 名前:デフォルトの名無しさん mailto:sage [05/03/09 19:17:37 ] >>362 #include <set> using namespace std; struct hoge{int x;}; bool operator<(const hoge& a, const hoge& b){return a.x < b.x;} int main(){ set<hoge> s; s.insert(hoge()); return 0; } これ通らない?
365 名前:デフォルトの名無しさん mailto:sage [05/03/09 21:08:49 ] >364 それはhogeとoperator<が同じ名前空間(グローバル)で定義されているので通りますよ. std::complexを引数とする呼び出しからoperator<が見えるためには operator<がstd名前空間で定義されていないといけないです. でもそのような定義をstd名前空間に追加することは許されないので(>363), 自分で関数オブジェクトを書いて(>360)それをsetのテンプレート引数に与えるしかないです.
366 名前:デフォルトの名無しさん mailto:sage [05/03/09 21:12:46 ] で、結局こう、と。 #include <complex> #include <set> using namespace std; template <typename T> struct complex_less: binary_function<complex<T>, complex<T>, bool> { bool operator() (const complex<T>& a, const complex<T>& b) { return real(a) < real(b) || (real(a) == real(b) && imag(a) < imag(b)); } }; int main () { set< complex<int>, complex_less<int> > s; s.insert(complex<int>(1, 2)); return 0; }
367 名前:359 mailto:sage [05/03/09 21:25:39 ] >>360-366 皆さんありがとうございます。よく分かりました。 ちゃんと勉強しないとダメだなぁ〜 orz
368 名前:デフォルトの名無しさん mailto:sage [05/03/09 21:55:23 ] string とか pair が std 名前空間に operator < を定義しているから ADL のせいで operator < を std 名前空間の外に探しに行かないという認識であってますか?
369 名前:デフォルトの名無しさん mailto:sage [05/03/09 22:09:23 ] ↑俺には断言できん ↓あってるのか?
370 名前:デフォルトの名無しさん mailto:sage [05/03/09 22:11:50 ] あってる。
371 名前:369 mailto:sage [05/03/09 23:24:46 ] >>368 あってるぞ。 よし、俺ツーポイントゲット。
372 名前:デフォルトの名無しさん mailto:sage [05/03/10 04:08:30 ] その為に less がテンプレート引数になってるんではないのか。 …と、こないだ初めて map で less を使った俺が言いました。
373 名前:デフォルトの名無しさん mailto:sage [05/03/11 02:09:30 ] 練習で push_back_if なるものを書いてみたのですが 駄目だしお願いします。 template <typename IIte, typename Container, typename Pred> void push_back_if(IIte b, IIte e, Container &c, const Pred p) { for(;b!=e;b++) { if(p(*b)) c.push_back(*b); } } insert_if とか copy_if ってないんですか? あったら便利だと思うのですが・・・。
374 名前:デフォルトの名無しさん mailto:sage [05/03/11 02:24:34 ] copy_ifはある。あとはback_inserterを組み合わせて使えばよし。
375 名前:デフォルトの名無しさん mailto:sage [05/03/11 02:27:17 ] > copy_ifはある。 ウソだった。標準ではない。すまん。
376 名前:デフォルトの名無しさん mailto:sage [05/03/11 02:36:13 ] >>373 残念ながらcopy_ifは標準にはない。どっかに作っておいたら? //copy_if template <typename InputIterator, typename OutputIterator, typename Predicate> inline OutputIterator copy_if(InputIterator begin, InputIterator end, OutputIterator destBegin, Predicate p) { while (begin != end) { if (p(*begin)) *destBegin = *begin; ++destBegin; ++begin; } return destBegin; }
377 名前:デフォルトの名無しさん mailto:sage [05/03/11 16:52:41 ] >>373 > for(;b!=e;b++) ++bにしたほうがいい。
378 名前:デフォルトの名無しさん mailto:sage [05/03/11 19:43:05 ] >377 また荒れるようなことを
379 名前:デフォルトの名無しさん mailto:sage [05/03/11 20:28:43 ] いやいや荒れるまでもなく当たり前の事ですよ
380 名前:373 mailto:sage [05/03/11 21:26:10 ] >>374-379 レスが遅くなってすいません。参考にします。
381 名前:デフォルトの名無しさん mailto:sage [05/03/13 00:46:27 ] 荒れてもいいから理由を教えろ
382 名前:デフォルトの名無しさん mailto:sage [05/03/13 01:27:48 ] >>381 後置インクリメントだと、一時オブジェクトが必要になるから。 POD型の場合でもレジスタを余計に必要としたりね。 #それが理由で後置インクリメントを持たないクラスも作ることも多いし。
383 名前:デフォルトの名無しさん mailto:sage [05/03/13 01:32:28 ] C++より++C
384 名前:デフォルトの名無しさん mailto:sage [05/03/13 01:50:07 ] > POD型の場合でもレジスタを余計に必要としたりね。 は?
385 名前:デフォルトの名無しさん [05/03/13 03:26:57 ] 今 typeof が使えるコンパイラって g++, icc の他にどんなのがある? typeofなんてぶっちゃけ template つかってないと殆ど使わんだろうしここでいいよね。
386 名前:デフォルトの名無しさん mailto:sage [05/03/13 09:54:26 ] RTTIとテンプレートはあまり関係ないだろうと思いつつ、 ほとんどのメジャーなコンパイラは扱えますよ。
387 名前:デフォルトの名無しさん mailto:sage [05/03/13 09:57:05 ] typeidじゃないよ。
388 名前:デフォルトの名無しさん mailto:sage [05/03/13 12:31:23 ] メジャーじゃないコンパイラは"ほとんど"に含まれない言葉のトリック
389 名前:デフォルトの名無しさん mailto:sage [05/03/13 13:47:16 ] そういうもんだいではない
390 名前:デフォルトの名無しさん mailto:sage [05/03/13 17:59:47 ] #define FOR_EACH(RANGE, ITERATOR) \\ for(boost::range_iterator::< typeof(RANGE) >::type ITERATOR \\ = boost::begin(RANGE); \\ ITERATOR != boost::end(RANGE); \\ ++ITERATOR) int a[3] = {1, 2, 3}; FOR_EACH(a, it){ cout << *it << endl; }
391 名前:デフォルトの名無しさん mailto:sage [05/03/13 18:00:22 ] struct plus { template<class LHS, class RHS> typeof(l + r) operator()(LHS const &lhs, RHS const &rhs) const{ return lhs + rhs; } private: LHS l; RHS r; };
392 名前:デフォルトの名無しさん mailto:sage [05/03/13 18:15:58 ] 391間違えました.スレ汚してすいません template<LHS, RHS> struct plus_result{ typedef typeof(l + r) type; private: LHS l; RHS r; }; struct plus { template<class LHS, class RHS> typename plus_result<LHS, RHS>::type operator()( LHS const &lhs, RHS const &rhs) const { return lhs + rhs; } };
393 名前:デフォルトの名無しさん mailto:sage [05/03/13 18:17:47 ] typeof って何で標準に入る予定ないの?
394 名前:デフォルトの名無しさん mailto:sage [05/03/13 18:21:14 ] 最初からplus_resultのとこにtypeofを書けばいいような?
395 名前:デフォルトの名無しさん mailto:sage [05/03/13 20:16:10 ] >>393 そんなこと誰が言ったんだ?
396 名前:デフォルトの名無しさん mailto:sage [05/03/13 22:50:55 ] 条件Aに適合する場合にBを適用するという意味で apply_if を書いてみたのですが、駄目だしをお願いします。 template <typename IIte, typename CheckPred, typename ApplyPred> void apply_if(IIte begin, IIte end, CheckPred check, ApplyPred apply) { for(;begin!=end;++begin) { if(check(*begin)) apply(*begin); } }
397 名前:デフォルトの名無しさん mailto:sage [05/03/13 23:18:26 ] >>396 じゃ遠慮なく。 ・名前の省略するな。(×IIte → ○InputIterator) ・Pred は predicate(述語) の略なので、 bool を返す関数以外には使うな。(×ApplyPred → ○UnaryFunction) ・*begin が繰り返されているのは良くない。 ・std::for_each() に倣って UnaryFunction を戻り値としたほうがいいかもしれない。
398 名前:デフォルトの名無しさん mailto:sage [05/03/14 00:29:28 ] >>397 細かいことを言えば、 InputIterator に apply はまずい。 InputOutputIterator じゃ長いけど。
399 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:03:01 ] とりあえず試しに Visual C++ Toolkit 2003 を使ってみたけど、 typeof() は使えない模様。__typeof とかなんかあったりするのかな?
400 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:06:34 ] >>398 イテレータのコンセプトを表すという意味で InputOutputIterator はありえない。 出力も兼ねると言うことなら、現行の規格では ForwardIterator が候補になるだろう。 しかしここも std::for_each() に倣って InputIterator とするのが正解だろう。
401 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:13:19 ] なんなんだよ、typeof()って? 初めて聞いたぞ。 type_infoクラスとtypeid演算子ならC++にあるけど、 typeof()は何をするためのもの?
402 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:21:18 ] >>401 まず最初に言っておくと、typeofは今のところまだ標準には無い。 で、まぁ名前の如く変数の型を得る演算子(?)の事。 Type a; typeof(a) b = a; みたいに使える。 この例では a の型が分かってるけど、Expression Template なんかの場合はどえらい事になっちゃうっしょ。 って分かりにくいかなぁ。誰か分かりやすい例キボンヌ。
403 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:27:44 ] その程度だとtypeid, type_infoとどう使い方が違うのか見えんな。
404 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:29:18 ] テンプレート宣言の template<typename HOGE> を適宜、 template<typename HOGE, typename PLUS_TYPE> にすれば回避できるんじゃないの? 曖昧さの解決にもなるし。 というか、C++とtypeof()は相性が最悪な気がする。 多重継承さえ嫌がる人が多いというのに、 typeof()は、無駄にデバッグ作業を増やさせるだけではないか?
405 名前:デフォルトの名無しさん mailto:sage [05/03/14 01:31:35 ] >>400 ForwardIteratorが正しいね。 しかし、InputIterator で要素の変更を行うのは論外では? for_each()は変更を伴わない関数。 本質的に違う関数に倣うという理由付けも理解に苦しむ。
406 名前:デフォルトの名無しさん mailto:sage [05/03/14 02:01:52 ] >>405 std::for_each() で要素の変更は許される方向にあるらしい。 ttp://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#475 「いまさら禁止されては困る」という本音が多分にあるだろうと思うので、 明示的に許可を後付けされてもすっきりしないよな。 はっきりと Mutating algorithm に移動させて欲しい。
407 名前:デフォルトの名無しさん mailto:sage [05/03/14 08:46:06 ] >>403 オマエの目は節穴なのでしょうか?
408 名前:402 mailto:sage [05/03/14 11:23:16 ] >>403 うーん、例が悪いでしょうかねぇ。ただ、typeidと決定的に違うのが、 「コンパイルタイムに決まる」、という事。 んだから、「謎の型を宣言、定義可能」って事なんですけどね。 明日から海外飛ぶんで誰かフォローよろ。
409 名前:デフォルトの名無しさん mailto:sage [05/03/14 12:32:23 ] 俺も来週から地方飛ばされるんで 誰か助けてくれ
410 名前:デフォルトの名無しさん mailto:sage [05/03/14 12:37:00 ] 俺はneetなんである意味助けてくれ
411 名前:デフォルトの名無しさん mailto:sage [05/03/14 12:37:50 ] >>408 ,409 そのままキャッチされない例外に飛ばされて人生の強制終了。
412 名前:デフォルトの名無しさん mailto:sage [05/03/14 12:43:12 ] C++よりMLの方がいいよ。
413 名前:デフォルトの名無しさん mailto:sage [05/03/14 12:45:00 ] メーリングリスト
414 名前:396 mailto:sage [05/03/14 23:32:14 ] >>397 ,398,400,401,405,406 参考にしたいと思います。ありがとうございます。
415 名前:デフォルトの名無しさん mailto:sage [05/03/15 00:04:29 ] C++よりMLの方がいいよ。
416 名前:デフォルトの名無しさん mailto:sage [05/03/15 00:16:03 ] >>412 >>415 利点をあげてくれ、なにがいいのかわからん
417 名前:デフォルトの名無しさん mailto:sage [05/03/15 00:47:28 ] このスレが不要になるぐらい明快
418 名前:デフォルトの名無しさん mailto:sage [05/03/16 07:47:07 ] そうか、typeofはgccとintel以外じゃ使えないのか。 クラス階層のメンバを辿るときとか便利なんだよな。 node->get_parent()->get_view() とかで参照をとるとき、一回だけだと その場に書くけど長いと面倒なので何か別名を割り当てるためだけに ローカル変数に代入するわけだ。 そういうとき、 #define LET(var,exp) typeof(exp) var = (exp) とかすると VeryVeryLongClassName parent_view = node->get_parent()->get_view(); のかわりに LET(panent_view, node->get_parent()->get_view()); と書ける。非常にラクチン。 boostのlambdaみたいにすればtypeofなしでも同じようなことができるかも。
419 名前:デフォルトの名無しさん mailto:sage [05/03/16 08:08:57 ] >>418 boost spirit typeof
420 名前:418 mailto:sage [05/03/16 09:26:00 ] どうもboostの定義をみてるとMetrowerksにもtypeofがあるようだ。 んで、typeofのテンプレートによる実装もあるみたいだね。 aspn.activestate.com/ASPN/Mail/Message/boost/2504137 boostのsandboxにtypeofの実装があるらしい aspn.activestate.com/ASPN/Mail/Message/boost/2504137 Code Projectの記事。typeofのVC7用実装。 これによるとboost::mplにも BOOST_MPL_AUX_REGISTER_TYPE(123, abc); abc aa1; BOOST_MPL_AUX_TYPEOF(_, aa1) *aa2 = &aa1; というtypeofがあるらしいがundocumentedだのuglyだの不便だのと切って捨てている。 >>419 ? よくわからんちん。
421 名前:デフォルトの名無しさん mailto:sage [05/03/16 15:39:09 ] >>420 boost.cppll.jp/HEAD/libs/spirit/doc/subrules.html typeofはレビュー待ちの状態だと以前読んだ希ガス
422 名前:デフォルトの名無しさん mailto:sage [05/03/16 16:23:33 ] >>420 Metrowerks CodeWarriorでの話。 __typeof__()演算子があって、これは常に使える。typeof()演算子を使うには #pragma gcc_extensions onとする必要がある。こうすると、以下のGNU Cの言語 拡張機能を利用します。 ・auto変数の構造体、または配列を、定数以外の値で初期化することを許可します。 ・sizeof( void ) == 1 ・sizeof( function-type ) == 1 ・評価式の内部のGCCステートメントと宣言を、制限付きでサポートします。 ・#undefがその前にないマクロの再定義。 ・GCCのtypeofキーワード。
423 名前:デフォルトの名無しさん mailto:sage [05/03/17 09:40:37 ] >418 >boostのlambdaみたいにすればtypeofなしでも同じようなことができるかも。 逆だと思いますよ.lambdaも状況は似たようなもので むしろlambdaもtypeofがあればいろいろうれしいです. でもboostのtypeofの実装はさすがにやりすぎな気が・・・ そもそもtypeofの機能をライブラリで提供する/できるというのが異常というか
424 名前:418 mailto:sage [05/03/17 10:10:08 ] 420のCode Projectの方のリンクが寝惚けてました^^; 正しいのはこっち。 www.codeproject.com/vcpp/stl/typeof.asp >>421 すいません、あいかわらずよくわかりません。subruleが普通のコードでも使え るってこと? 数字を手で入れる必要があるのは面倒なような……。 >>422 補足サンクスです。そうそう、__typeof__でした。 そうか、MetrowerksはGCC拡張を一部サポートするんですね。
425 名前:デフォルトの名無しさん mailto:sage [2005/03/25(金) 00:52:31 ] gcc 3.4のバグだろうか。 テンプレート関数の中で boost::mpl::identity<typeof(foo->get_bar())>::type bar; と変数を定義しようとすると何故か expected `;' before "bar" というエラーになる。 普通の関数の中なら問題なく通るのだけど。
426 名前:デフォルトの名無しさん mailto:sage [2005/03/25(金) 00:58:26 ] >>425 typname
427 名前:デフォルトの名無しさん mailto:sage [2005/03/25(金) 02:26:51 ] >>426 サンクス。 typenameは試したはずなんだけど……と思いつつやってみると コンパイル通りました。吊ってきます。
428 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 01:09:51 ] Boost.Serialization の #include <boost/serialization/shared_ptr.hpp> にある #define private public #include <boost/shared_ptr.hpp> #undef private って、shared_ptr の方を変更してもらえないんですかね? 別のスレッドで Boost.Serialization を教えてもらったんですけど、 これが、ちょっと気になります……。
429 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 01:17:26 ] 変更して貰えるわけないだろ、氏ね(ここまで一筆書き)
430 名前:428 mailto:sage [2005/03/30(水) 02:21:20 ] >>429 Boost 同士ということで friend にしてもらうくらいなら、 と思ったんですが、直接には関係しない物のために変更するのは、 やっぱり無理ですよね。
431 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 04:00:47 ] そういうのはここで訊くよりboostのメーリングリストを検索した方がいいのでは。
432 名前:428 mailto:sage [2005/03/30(水) 05:05:42 ] >>431 読んでも分からなさそうと言う事で避けてました。すみません。 で、検索してみたら、そのままの議論がありました。 が、やっぱり分かりませんでした。orz ただ使うだけにします。ありがとうございました。
433 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 05:40:36 ] そういう場合はスレッドのURLとか貼っておくといいかもね。
434 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 13:22:32 ] Serializetionがオブジェクトを覗き見しなきゃいけないことを>>428 は理解してないのか? shared_ptrの方で変えたら、通常利用で保護出来ないじゃないか。
435 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 13:57:46 ] >>434 >>430
436 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2005/03/30(水) 18:14:32 ] これかな? lists.boost.org/MailArchives/boost/msg74873.php
437 名前:428 mailto:sage [2005/03/31(木) 11:07:00 ] >>436 それです。 shared_ptr の人も交えて、実装に立ち入った問題点などが議論されていて、 日頃使っているだけの私では、良く分かりませんでした。
438 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [int 2ch =05/04/01(金) 20:35:21 ] >>437 つか、Thread Index で変なとこに飛ばされて、 議論が追っかけずらいんだよね(´・ω・`)
439 名前:デフォルトの名無しさん mailto:sage [int 2ch =05/04/01(金) 23:10:42 ] >>438 thread.gmane.org/gmane.comp.lib.boost.devel/113499
440 名前:デフォルトの名無しさん [2005/04/10(日) 19:16:42 ] Spiritのアクションってなんで2引数必要なの? 値を代入したい時は冗長になるぅ... expr = (str_p(L"1"))[boost::lambda::_1,boost::lambda::_2,data=1];
441 名前:デフォルトの名無しさん mailto:sage [2005/04/12(火) 10:09:35 ] template<class T> class A { public: A(const A&); // 引数 A func() // 返り値 { A a; // 自動変数 return a; } }; クラステンプレートで上記のコメントのところのように Aとだけ書いた場合A<T>と同じ意味になる、という解釈は正しいですか?
442 名前:デフォルトの名無しさん mailto:sage [2005/04/12(火) 10:39:06 ] >>441 正しいです。 ttp://www.kuzbass.ru/docs/isocpp/template.html#temp.local
443 名前:441 mailto:sage [2005/04/12(火) 11:09:04 ] >>442 ありがとう。よくわかりました。
444 名前:デフォルトの名無しさん mailto:sage [2005/04/22(金) 04:23:40 ] 鬼車みたいに マルチバイトで正規表現使えると速度面では有利なのかな? ワイド文字で System.Text.RegularExpressions(C#) boost::wregex boost::expressive boost::spirit 試してみたけど敵わなかった... 鬼車>>C#>=boost::wregex>>expressive>>>>>>spirit
445 名前:444 mailto:sage [2005/04/22(金) 04:52:13 ] >>444 spiritのパーサの型がわからんかったんで 毎回生成してたは...道理で遅いはずや... typeid(parser).name()で出力された型にparser保存してループ回したら 鬼車=spiritになったわ... 逝ってくる...
446 名前:デフォルトの名無しさん mailto:sage [2005/04/22(金) 21:22:11 ] CommonLispの正規表現が最速
447 名前:デフォルトの名無しさん mailto:sage [2005/04/22(金) 23:32:46 ] >>445 当たり前だ。C++が遅かったら、コンパイラ言語を使って正規表現を扱う意味が ないやんけ。
448 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 01:11:14 ] コンパイラ言語? 式テンプレートを使ったメタプログラミングのこと?
449 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 09:45:54 ] インタプリタ言語と比較してるだけっしょ
450 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:03:21 ] またなんかミクロな揚げ足取りしてるんだろうね、きっとw
451 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:19:30 ] >>448 友達いないでしょ。
452 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:23:08 ] >>448 どういう風に表現すれば一番適切なのか教えて。 >>450-451 おまえらはどうでも良い。
453 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:31:09 ] 言い負けるのが余程悔しいんだろうな。 リアルな世界では気の強さが災いして、友達どころか彼女もいないと思われる。 家族にも総スカン。
454 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:32:56 ] >>453 どうしてそういう返事をつけるのかな? 普段よっぽど抑圧されてるのか? もっと自分を愛そうね。
455 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:36:57 ] スレタイ嫁