[過去ログ] Boost総合スレ part9 (981レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
356
(5): デフォルトの名無しさん [] 2011/02/28(月) 16:34:27.96 AAS
質問です。
以下ページにあるC++0x用LINQメソッドを
外部リンク:smellegantcode.wordpress.com
使用した結果をBOOST_FOREACHに入れて回そうとしたのですが、
コンパイルエラーとなってしまいます。
std::vector<int> array = { 1, 2, 3, 4, 5 };
auto result = from(array).where([] (const int & n) { return (n % 2) == 0; });
auto itr = result.begin(); // 通る
BOOST_FOREACH (auto n, result) { } // コンパイルエラー
外部リンク:ideone.com (boostの環境が作れなかったのでソース閲覧用に)
iteratorのBOOST_FOREACHに対する要件が足りていないのかと思い、
iterator_adaptorやiterator_facadeを
const_iteratorに継承させたりしてみたのですが、
私がこれらをあまり理解出来ていないこともあってか
最終的にコンパイルエラーを取り除くことが出来ませんでした。
(あとtypedef const_iterator iterator;も追加してみました)
どなたか解決のヒントをいただけませんでしょうか?
357: デフォルトの名無しさん [sage] 2011/02/28(月) 17:24:43.30 AAS
>>307
307(1): デフォルトの名無しさん [sage] 2011/02/07(月) 06:24:52 AAS
>>298
Haskellのライブラリなんか殆どが何に使えるのかわからん
例えば?
358: デフォルトの名無しさん [sage] 2011/03/01(火) 02:11:17.74 AAS
>>356 エラーメッセージは?
359: デフォルトの名無しさん [sage] 2011/03/01(火) 09:41:42.85 AAS
エラーメッセージ書かない時点で
答えてもらう気ないだろ
360: デフォルトの名無しさん [sage] 2011/03/01(火) 09:49:27.12 AAS
boost使用時のコンパイラエラーメッセージって役に立つか?
立たないことは無いけど、異様に長いし、エラーをピンポイントで指摘してないし。
結局、行番号を頼りに修正することが多い。
361: 356 [] 2011/03/01(火) 10:40:42.97 AAS
プロジェクトパス\project\boost_1_45_0/boost/mpl/eval_if.hpp:
In instantiation of 'boost::mpl::eval_if<mpl_::bool_<false
boost::range_const_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int>
pass_thru<int always_true<int> >::const_iterator, pass_thru<int main()::<lambda(const int&)> >
boost::range_mutable_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int>
pass_thru<int always_true<int> >::const_iterator, pass_thru<int main()::<lambda(const int&)> > > >':
プロジェクトパス\project\boost_1_45_0/boost/foreach.hpp:355:13:
instantiated from 'boost::foreach_detail_::foreach_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int>
pass_thru<int always_true<int> >::const_iterator, pass_thru<int main()::<lambda(const int&)> mpl_::bool_<false> >'
プロジェクトパス\project\linq.cpp:150:2:
instantiated from here
プロジェクトパス\project\boost_1_45_0/boost/mpl/eval_if.hpp:38:31:
error: no type named 'type' in 'struct boost::mpl::eval_if<mpl_::bool_<false
boost::range_const_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int>
pass_thru<int always_true<int> >::const_iterator, pass_thru<int main()::<lambda(const int&)> >
boost::range_mutable_iterator<filter<int, int, filter<int, int, __gnu_cxx::__normal_iterator<const int*, std::vector<int>
pass_thru<int always_true<int> >::const_iterator, pass_thru<int main()::<lambda(const int&)> > > >::f_'
362
(1): 356 [] 2011/03/01(火) 11:12:03.69 AAS
失礼しました。上記のがideoneのソースそのままでのコンパイルエラーです。
イテレータの解釈辺りでtypeのtypedefが無いということのようなので、
イテレータがforeachの走査対象に足る要件を満たしていないのかなと判断しました。
iterator_adaptors系を使えば良い感じに揃えてくれるのかな?と思ったのですが、
それらを用いるコードが私の理解ではきちんと書けていない状況です。
363: デフォルトの名無しさん [sage] 2011/03/01(火) 13:34:43.76 AAS
日本人の貢献者ねえ・・・

cpanオーサーに日本人増えてきたらこんな事件おきたり
外部リンク[pl]:www.yabbforum.com
phpが「流行」したりする謎を知らないのかな
364
(2): デフォルトの名無しさん [] 2011/03/01(火) 17:18:11.86 AAS
Boost.Rangeを使ってみているのですが、
STLコンテナのinsert等にrangeを渡したりは出来ないんでしょうか?
begin/endを呼ぶためだけに変数に格納するのが何かおかしく感じます。
365
(1): デフォルトの名無しさん [sage] 2011/03/01(火) 21:17:41.84 AAS
>362
>イテレータの解釈辺りでtypeのtypedefが無いということのようなので、
>イテレータがforeachの走査対象に足る要件を満たしていないのかなと判断しました。
多分違う。エラーが出てるのは mpl::eval_if のところなのでここでエラーの出てる type は
mpl のメタ関数としての type だ。
あとエラーの出てる行は古いコンパイラ用の workaround のところで VC++ .NET 2002 以前を使ってる場合に
当たるんだけど C++0x 向けでラムダ式とか使ってるみたいだしなんかどっかおかしそう。
366
(1): デフォルトの名無しさん [sage] 2011/03/01(火) 21:25:53.46 AAS
>364
コンテナにメンバ関数を追加するわけにはいかにので別途アルゴリズムが用意されてる。
外部リンク[html]:www.boost.org
367: 356 [sage] 2011/03/02(水) 03:39:10.88 AAS
>>365
なるほと・・、私の見当違いだったんですね。
マクロシンボルでの分岐をトレースして原因を調べてみたいと思います。
おかげで一歩前へ進めます。どうもありがとうございました。
368: 364 [sage] 2011/03/02(水) 04:08:56.10 AAS
>>366
おぉぉありがとうございます!
これでbegin/endのタイプ量が激減してソース横幅も縮みそうです。
やはりきちんと用意されているものなのですね。

ただメンバ関数とは書く順番が変わってしまうのですか・・
黒魔術的な何かで何とかされているかと思っていたので少し残念です。
C++にも拡張メソッドが欲しくなりますね。
369: デフォルトの名無しさん [sage] 2011/03/02(水) 18:19:07.50 AAS
どうも1.46.1が出るっぽい
なんぞ不具合でもあったのかしら
370: デフォルトの名無しさん [sage] 2011/03/03(木) 00:50:04.85 AAS
>>356
そこのconst_iteratorをstd::iterator<std::input_iterator_tag, TElemTo const>から派生させたら、
BOOST_FOREACH (auto n, boost::make_iterator_range(result.begin(), result.end()))
がコンパイル通るようになった。
371: デフォルトの名無しさん [sage] 2011/03/03(木) 02:37:10.73 AAS
boost/regexで
マッチする部分をすべて取り出すことって出来ます?

boost::regex r("a[^a]+b");
boost:smatch m;
string s = "ahb anb atb";

ならahb anb atbそれぞれを取り出したいのですが。
372
(1): デフォルトの名無しさん [sage] 2011/03/03(木) 02:49:02.95 AAS
std::string::const_itarator itbegin = s.cbegin();
std::string::const_itarator itend = s.cend();
while (std::regex_search(itbegin, itend, r, m) {

itbegin = m[0].second;
}
373: デフォルトの名無しさん [sage] 2011/03/03(木) 02:53:01.08 AAS
>>372
ありがとうございます。
374
(2): デフォルトの名無しさん [sage] 2011/03/03(木) 12:25:13.55 AAS
以前に
VisualStudio
の環境でダウンロードしただけで動くものをまとめてファイルにアップしてた人がいたけど
誰かurl知りませんか?

便利なのにテンプレに載ってないのはなんでです?
375
(1): デフォルトの名無しさん [sage] 2011/03/03(木) 12:28:20.53 AAS
過去ログでみつけた
外部リンク:boooster.x0.to
376: デフォルトの名無しさん [sage] 2011/03/03(木) 15:31:43.47 AAS
前と違って、今は公式でVisualStudio用のバイナリが配付されてるじゃん
そういえばどっかの企業もバイナリ配布してたけどやめちゃったな
377: デフォルトの名無しさん [sage] 2011/03/03(木) 17:21:36.18 AAS
>>374,375
それsvnの野良ビルドだよね確か。
svn最新なので万人向けじゃないし、svn追っかける人なら自分でビルドするし、特に需要がなかったんじゃない?
あと更新される度にスパムのようにURL貼ってたのでウザがられてた。
テンプレ申請なりサイトでRSS配信なりすればよかったのにね。
378: デフォルトの名無しさん [sage] 2011/03/03(木) 17:55:36.54 AAS
bjamでビルド簡単になったんだからboostぐらいビルドしようぜ・・・
boost使う=開発環境あるわけだし。
ビルドに時間掛かるのは別w
379
(3): デフォルトの名無しさん [sage] 2011/03/04(金) 10:17:25.38 AAS
Windowsは知らないけどLinuxでBoostビルドすると風呂入って一眠りしてコーヒー飲むぐらい時間かかるんだけど・・・
380: デフォルトの名無しさん [sage] 2011/03/04(金) 10:32:46.31 AAS
>>379
それってPCの性能じゃなくてOSの差なんですか?
1-
あと 601 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.020s