[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 22:57 / Filesize : 262 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】template 統合スレ -- Part6



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 あたりに。


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 ]
スレタイ嫁

456 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:51:39 ]
>>447は、C++のコードをコンパイルして実行から速いと言っているのか、
汎用のDFSマシンじゃなくて、式テンプレートを使ったメタプログラミングで、
専用レクサーを生成して実行しているから速いと言っているのか、
どっちなんだ? 両方か?



457 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 17:26:58 ]
>>456
真性のアフォ?

458 名前:デフォルトの名無しさん mailto:sage [2005/04/24(日) 04:51:27 ]
GCC 4.0.0 に TR1 が来ましたね。うれしい。
ソースは boost のごちゃごちゃしたコンパイラ分岐が無くなった分、
だいぶすっきりした印象






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef