Boost総合スレ part7at TECH
Boost総合スレ part7 - 暇つぶし2ch458:デフォルトの名無しさん
09/04/28 00:38:20
>>457さん

確認したのですが bind.hppのエラーしか出力されていないようです。
ちなみにエラー箇所はbind.hppの68行目で

template<class F> struct result_traits<unspecified, F>
{
typedef typename F::result_type type;
};
から出力されておりエラー内容は
error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません c:\includefiles\boost\bind.hpp
error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp
error C2146: 構文エラー : ';' が、識別子 'type' の前に必要です。c:\includefiles\boost\bind.hpp
error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp
error C1903: 直前のエラーを修復できません。コンパイルを中止します。c:\includefiles\boost\bind.hpp
error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp
error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp
と記述されています。お手数ですがアドバイスお願いいたします。



459:デフォルトの名無しさん
09/04/28 00:57:36
>>458
boost::bind()を呼ぶところの第3引数が間違っている可能性が高い。
だから>>457

460:デフォルトの名無しさん
09/04/28 00:59:54
>>459
第3は余計だった。なんでこんなこと書いたんだ
とにかく引数の指定を間違えてる

461:デフォルトの名無しさん
09/04/28 01:38:35
>>458
最近のVisual C++なら、
「foo.cpp(7) : コンパイルされたクラスの テンプレート のインスタンス化 'HogeHoge' の参照を確認してください」
ってのがエラーメッセージの随所に挟まっている。
(IDEからビルドしているなら、エラー一覧ではなく出力ウィンドウのほうに)
このメッセージだけを見ていくと、その中に必ず自分のソースコードを指しているものがあるはず。

462:デフォルトの名無しさん
09/04/28 02:01:59
>>459,460,461
返事が遅くなってしまい申し訳ございませんでした。
ご親切なご回答ありがとうございます。

自分のソースを確認した所、
1>c:\includefiles\boost\bind.hpp(67) : error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません
1> c:\includefiles\boost\bind\bind_template.hpp(15) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::result_traits<R,F>' の参照を確認してください
1> with
1> [
1> R=boost::_bi::unspecified,
1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw()
1> ]
1> c:\work_data\gg\src\network\servent.cpp(54) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::bind_t<R,F,L>' の参照を確認してください
1> with
1> [
1> R=boost::_bi::unspecified,
1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw(),
1> L=boost::_bi::list3<boost::_bi::value<Servent *>,boost::arg<1>,boost::arg<2>>
1> ]


463:デフォルトの名無しさん
09/04/28 02:13:39
すみません、誤って書き込んでしまいました。上記のエラーメッセージが出力されています。
ソースとしては、
typedef typename result_traits<R, F>::type result_type;
boost::bind(&Servent::read, this,boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

あと質問なのですが、boostのバージョンによる不具合の可能性はあるのでしょうか?
現在boostの1.35を使用して実行しております。

度々ご質問して申し訳ございません。


464:デフォルトの名無しさん
09/04/28 06:06:36
>>454
> 初心者ですが
これいらない

465:デフォルトの名無しさん
09/04/28 14:21:59
ついにboostもcmakeか


466:デフォルトの名無しさん
09/04/28 14:50:26
>>463
コンパイルしてそのエラーの出る最低限のソースが必要。


467:デフォルトの名無しさん
09/04/29 01:27:44
VC++のバージョンは?
7.0以下だと該当コードは利用できず、別のコードに置換されるみたいだけど。

468:デフォルトの名無しさん
09/04/30 11:13:14
enable_ifの引数にboost::mplもつかえるんだね。boostってスゲエと思った。


469:デフォルトの名無しさん
09/04/30 19:11:05
>>468
ホントすげぇよBoost。
C++が大好きなんだろうなぁと思わせられるよね(笑)
Boost.Lambda(functionも。)やBoost.Spirit、Boost.MPLあたりが変態級の名を冠するにふさわしいか。
利便性で言えばshared_ptrもヤヴァイけど。

470:デフォルトの名無しさん
09/04/30 22:49:38
preprocessorを忘れるとはけしからんな。

471:デフォルトの名無しさん
09/04/30 23:11:00
C++ code - 32 lines - codepad
URLリンク(codepad.org)
このコードにて、エラーになる原因が分かりません。
私の考えでは
boost::lambda::bind(func_i, boost::lambda::protect(boost::lambda::bind(my_name, boost::lambda::_1)))
でconst char* constを受け取りintを返す関数が得られるので、
それをlambda_test_funcの引数として渡せるのではないかと思ったのですが。
どこを修正すればよろしいでしょうか?


472:デフォルトの名無しさん
09/04/30 23:17:13
>>471
lambda で生成される関数は、関数オブジェクトの一種。
関数へのポインタは C++ 言語上の「関数」を指すことができるけど、
言語上はクラスオブジェクトとなる関数オブジェクトを指すことはできない。

関数と関数オブジェクトを同等に扱うためのものとして boost::function がある。

- void lambda_test_func(int (*func_ptr)(const char* const char_ptr))
+ void lambda_test_func(boost::function<int (const char*)> f)

473:472
09/04/30 23:38:58
>>471
あと、関数合成に boost::lambda::protect 要らない。
URLリンク(www.boost.org)

474:デフォルトの名無しさん
09/05/01 02:59:05
UBLas使ってる人に聞きたいんだけど、固有値分解とかはどうやってるの?
検索するとCLapack使ってるのしかでないけど、みんな自前で書いてるの?

475:471
09/05/01 05:58:59
>>472
ありがとうございます。
学べました!

476:デフォルトの名無しさん
09/05/01 19:03:13
更新しました。今週はSpiritに大きな変化がありました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Mpl]
portability patch for sunpro on little-endian platforms
[Regex]
Added support for \g \K and \R.
[Spirit]
Merging Spirit V2.1
Spirit: Added missing files, deleted old files, cleaned up empty directories
Spirit: Started to add repository of reusable Spirit components, added
repository::karma::confix and some related tests
Spirit: Fixed assertion in multi_pass iterator
[Statechart]
Updated VC project files to 1.39.
Fixed a bug that prevented the use of boost::ref()
with fifo_scheduler<>::create_processor<>, reported by Steve Hawkes.
This should fix the non-standard code used in changeset 52616.
[Signals2]
Trying to fix compile problems on msvc 9 in release mode.
[Serialization]
Correct logic for enabling THROW_EXCEPTION
Add support for std::bitset.hpp


477:デフォルトの名無しさん
09/05/01 19:10:05
>>476
ほほうspiritがV2になったのか


478:デフォルトの名無しさん
09/05/02 01:00:05
>96 の問題は直ったんだろうか

479:デフォルトの名無しさん
09/05/02 22:45:06
>>476
Signals2って何かな?と思って調べたらスレッドセーフのSignalらしい。これは欲しい。


480:デフォルトの名無しさん
09/05/03 12:01:48
1.39きたぁぁぁ

481:デフォルトの名無しさん
09/05/03 13:32:00
>>480
Boostって結構こまめに更新した方が良いの?
俺のBoostは1.37なんだけど。。。

482:デフォルトの名無しさん
09/05/03 13:50:15
>>481
最近一定期間ごとにリリースする方針に変えたらしいね。
更新内容を見て、興味のない更新ばかりだったら放置しても可だと思うけど。

特に最近は後方互換性を平気で破壊するような更新が多いから悩む。
exceptionとかexceptionとかexceptionとか。

483:481
09/05/03 13:57:14
>>482
ありがとう。exceptionって使ったこと無いなぁ。便利?

その仕様変更はBoostだから出来ることか。
まあC++に正式に乗っちゃったら迂闊に仕様変更できないから
今のうちに満足行くまで更新して欲しい。

484:481
09/05/03 14:01:33
>>482
ホントだ、1.36以降、3ヶ月刻みになっているね。
Version 1.39.0
May 2nd, 2009 12:00 GMT
Version 1.38.0
February 8th, 2009 12:00 GMT
Version 1.37.0
November 3rd, 2008 12:00 GMT
Version 1.36.0
August 14th, 2008 12:00 GMT
Version 1.35.0
March 29th, 2008 12:00 GMT


485:471
09/05/03 14:36:17
>>472-473
ご教示の通り
boost::lambda::protectを外した上で boost::function を利用したところ、
問題無くコンパイル通りました。
ありがとうございました。

486:デフォルトの名無しさん
09/05/03 17:29:29
>>481
必要に応じてあげていけばいいと思うよ。
でもバージョン上げたら、コンパイルできなくなったりすることがあるから一気にバージョン上げるとつらいかも。


487:471
09/05/03 17:55:45
普通の部分では以前ご教示いただけた通りで動きました。
今度はBoost.Spiritのセマンティックアクションにラムダ式を入れる時にまた困っております。

//以下はMyClass.hの中身
class MyClass
{
MyClass();
virtual ~MyClass()=0;
public:
static const int get_10(const char * const);
};
//以下はMyClass.cppの中身
#include "MyClass.h"
const int MyClass::get_10(const char * const)
{return 10;}
//mainは以下です。
C++ code - 112 lines - codepad
URLリンク(codepad.org)

このソース中の質問箇所というコメントのところ
('/' >> fctr)[
boost::lambda::bind(func_geti_reti,
boost::lambda::bind(MyClass::get_10, boost::lambda::_1)
)
]
が問題点なのですが、

488:471
09/05/03 17:58:47
前述のように
①Boost.Spiritのセマンティックアクションに
②ラムダのbindで関数を結合し
③MyClass::get_10の部分ががクラスのstaticメンバ関数である
この①~③の時に
x_error.cpp:82: error: invalid initialization of non-const reference of type 'co
nst int (&)(const char*)' from a temporary of type 'const int ()(const char*)'
C:/BoostC++Libraries/boost/lambda/detail/bind_functions.hpp:256: error: in passi
ng argument 1 of `const boost::lambda::lambda_functor<boost::lambda::lambda_func
tor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambd
a::detail::unspecified> >, typename boost::lambda::detail::bind_tuple_mapper<typ
ename boost::lambda::detail::constify_non_funcs<T>::type, const Arg2, boost::tup
les::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuple
s::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples:
:null_type, boost::tuples::null_type>::type> > boost::lambda::bind(const Arg1&,
const Arg2&) [with Arg1 = const int ()(const char*), Arg2 = boost::lambda::place
holder1_type]'
というエラーが出てしまいます。
環境はg++です。

489:471
09/05/03 18:03:35
先のソースは
× MyClass::get_10(const char * const)
○ MyClass::get_10(const char * const, const char * const)
× boost::lambda::bind(MyClass::get_10, boost::lambda::_1)
○ boost::lambda::bind(MyClass::get_10, boost::lambda::_1, boost::lambda::_2)
とすべきでした。失礼致しました。
それでもなお
x_error.cpp:81: error: invalid initialization of non-const reference of type 'co
nst int (&)(const char*, const char*)' from a temporary of type 'const int ()(co
nst char*, const char*)'
というエラーが出てしまいます。
非constな参照でテンポラリな何物かを捉えているという旨のようですが、
どうすれば回避できるのか分かりません。
どうかお知恵をお貸しください。


490:471
09/05/03 18:31:34
boost::lambda::bind
をboost::bindに書き換えたら問題無く動作しました。
個人的にはboost::bindライブラリとboost::lambdaライブラリを混在させるのは気持ち悪いので
出来ればboost::bindの箇所は無くして全てboost::lambda::bindにしたいのですが、
どうすれば良いでしょうか?

491:デフォルトの名無しさん
09/05/03 20:36:47
3行でまとめてくれ

492:471
09/05/03 21:01:43
>>491
SpiritのSemantic Actionにlambda::bindで関数を結合して渡すとエラーになりますが、boost::bindならOKです。lambda::bindでも大丈夫にする方法を教えていただけないでしょうか?

493:デフォルトの名無しさん
09/05/03 21:17:04
恐縮ですwww
func_geti_retiの引数の&が余分じゃないか?


494:471
09/05/03 21:36:52
>>493
int func_geti_reti(const int& num)

int func_geti_reti(const int num)

int func_geti_reti(int num)
にしてみましたが、
error: invalid initialization of non-const reference of type 'const int (&)(const char*)' from a temporary of type 'const int ()(const char*)'
と言われます。
私の見解では
関数の戻り値などのテンポラリオブジェクト(この場合はint)を
constな参照で束縛できるというC++の仕様がありますから、
このあたりが問題な訳ではなさそうだと思っております。


495:デフォルトの名無しさん
09/05/04 20:23:45
letsboost::operators
URLリンク(www.kmonos.net)
ここで紹介されているoperatorsって、いちいち定義が面倒なのを自動化してくれるらしいから
便利そうだと思っているんだが、使うと遅くなったりするのかい?

496:デフォルトの名無しさん
09/05/04 23:18:04
しない。
ただし、クラス/構造体のサイズを余計に増やしたくなければ、ちょっとだけ特殊な記法が必要。

497:デフォルトの名無しさん
09/05/04 23:52:23
>>496
ほう、そうなんか。そのちょっとだけ特殊な記法とはEBOに関連する?

498:デフォルトの名無しさん
09/05/05 00:17:24
URLリンク(en.wikipedia.org)

499:デフォルトの名無しさん
09/05/05 00:21:31
>>498
EBOはEmpty Base Optimizationのつもりで書いた。
みんなに通じる略称かと思っていたが甘かったかな。

500:デフォルトの名無しさん
09/05/05 00:33:29
意味は判るがその略称は初めて見たぞ。
ちなみにその直感は超正しい。 俺はDirect3Dを使ったソフトでベクトル型をboost::operatorから継承したせいで
半日謎のバグと戦う羽目になった。

501:デフォルトの名無しさん
09/05/05 01:05:17
OpenGLで同様な目にあった俺参上。

502:デフォルトの名無しさん
09/05/05 08:58:41
ふーん、なんかややこしいような気がしてきてしまった。
何はともあれ皆さんありがとう。

503:デフォルトの名無しさん
09/05/05 11:29:54
Effective C++の最新日本語訳本を読んだところ、
p202にEBOがEmpty Base Optimizationの略称で使われているのを発見した。
原著ではどうなっているのかな?

504:デフォルトの名無しさん
09/05/05 12:29:05
EBO とか ADL, CRTP, SFINAE, RAII あたりは普通に使ってる

505:デフォルトの名無しさん
09/05/05 12:42:43
あとはRVO、NRVOかな

506:デフォルトの名無しさん
09/05/05 12:47:20
RAIIぐらいはいいが、
あんまりにも乱発するのは感心しないぞ。

507:デフォルトの名無しさん
09/05/05 13:11:24
TSKに、RNPTはKNSNしないな

508:デフォルトの名無しさん
09/05/05 13:14:46
>>506
ADLやSFINAEはバグの原因になるから
勝手に使えるようになる。

CRTPやEBOはどうなんだろ。
趣味でやってると手を出したくなるけど。

509:デフォルトの名無しさん
09/05/05 13:41:36
>508
いや、略語乱発は感心しないという話では?

510:デフォルトの名無しさん
09/05/05 14:48:23
だれがどう感心しないんだw

つうかそこいらの女子高生の略語に比べればカワイイもんだ

511:デフォルトの名無しさん
09/05/05 18:38:34
1.39落としたけど、
./booststrap.sh してできた project-config.jam の
option.set libdir の行が PREFIX/lib じゃなくて /lib になるのは
何かやんごとなき事情でもあるの?

512:デフォルトの名無しさん
09/05/07 11:06:59
1.39.0、またビルドの方法変わった?
1.38.0の時にやってた、

bjam --toolset=msvc-8.0 -sBZIP2_SOURCE=~ -sZLIB_SOURCE=~ --stagedir=. stage release debug link=static,shared runtime-link=static,shared

でビルドしようとすると何か途中で止まるんだが…

513:デフォルトの名無しさん
09/05/07 11:22:31
VC8なら、runtime-link=staticは使わないだろ。外した方が良い。
あとシングルスレッドライブラリも使わないから、threading=multiも指定した方が良いな。

514:デフォルトの名無しさん
09/05/07 11:26:39
>>513

おかげでビルド進みました。

515:デフォルトの名無しさん
09/05/07 11:36:46
まあ、それとビルドが進まないのとは別問題なんだけどな。
なんかmathがビルドできないな。
しかも、なぜか自分でファイルを消しておいて、そのファイルが見つからないからskipとかいうヘンなメッセージが。
もう一度試したらうまくいっているようだが。

516:デフォルトの名無しさん
09/05/07 12:30:11
>>515
link=staticとruntime-link=staticがどうたらこうたらっていうエラーメッセージが出て止まってた。
やっぱりバッチファイル直接実行じゃなくてコマンドプロンプトから実行しないとダメだな…

517:デフォルトの名無しさん
09/05/07 20:35:09
1.39でてたのか
チェックしてくる

518:デフォルトの名無しさん
09/05/07 21:19:56
>>517
1.37->1.39にした俺はspiritの名前空間が変わってて驚いた。


519:デフォルトの名無しさん
09/05/07 22:52:30
1.39のリリースノートによるとメモリリーク対策で導入すべきなのだが
再ビルドに時間がかかり面倒なので見なかったことにした

520:デフォルトの名無しさん
09/05/07 23:31:10
マルチコアなCPUを使うのは、今時のBoost使いなら当たり前。

521:デフォルトの名無しさん
09/05/07 23:40:39
ビルドが必要なライブラリって、なんかどうしても使う気になれないんだよねぇ。。。
みんな積極的に使ってる?

522:デフォルトの名無しさん
09/05/07 23:46:32
>>521
必要なら使う、当たり前のこと。

523:デフォルトの名無しさん
09/05/08 01:13:49
使うにしてもregexとfilesystemとserializationくらいだなぁ

524:デフォルトの名無しさん
09/05/08 01:59:58
program_opt……いや、なんでもないんだ

525:デフォルトの名無しさん
09/05/08 07:46:02
>>524
もうちょっとシンプルなら使うのに…

526:デフォルトの名無しさん
09/05/08 09:16:23
あれはシンプルとかそれ以前に問題が多すぎる。
boost初期からあるってだけで、今新規に投稿しようとしたら満場一致で拒否られるレベル。

527:デフォルトの名無しさん
09/05/08 09:29:49
program_optionを普通に使ってて便利だと思ってる俺がおかしいのか。

528:デフォルトの名無しさん
09/05/08 11:37:47
あれunicodeのサポートが最悪だよ。

529:デフォルトの名無しさん
09/05/08 21:48:14
>>518
1.38でビルド時に警告が出てた。


530:518
09/05/08 22:40:53
>>529
結局ソースを見てたどっていって正しい名前空間を見つけたから大丈夫だったがね。


531:デフォルトの名無しさん
09/05/09 09:36:58
上のほうの書き込み見て思ったが、1.39.0ではVS2005のランタイムライブラリに
マルチスレッドデバッグ(/MTdオプション)やマルチスレッド(/MTオプション)を
指定している場合用のライブラリのビルドできなくなってるのかな?

532:デフォルトの名無しさん
09/05/09 09:55:48
そもそもMS自身が、もはやスタティックリンク版のCRTライブラリの使用を推奨してない。

533:デフォルトの名無しさん
09/05/09 11:30:32
URLリンク(booster.x0.to)
確かにビルドの挙動が変わっていますね・・・。
少なくとも3週間以上、sharedライブラリがビルドされていない事に気付かないままアップロードしていましたので全て取り下げました。
申し訳ございません。
ところでお詫び代わりという訳でもありませんが、Windows+VC環境では導入が面倒なライブラリ群(bzip2,Expat,ICU,zlib 32/64bit)の
ビルド済みパッケージを用意しました。(libs_for_build_boost.rar)
残りのMPICH2とPythonのインストーラを公式からダウンロードしてインストールすれば、32/64bitBoostのフルビルドが簡単に行える様になります。
それから、build.txtを改訂序にhow_to_build.txtに名称変更しました。

そういえば今週のsvnスナップショットは今夜辺りにでもビルドしてアップロードする予定ですが、64bit版svnスナップショットの需要はありますでしょうか。
32bit版と同梱にすると圧縮しても250MB程度まで膨れ上がる可能性がありますし、
ファイルを分けるにしてもサイト容量と作業時間を食いますので需要が無ければ今迄通り32bit版のみにします。
若しくは、1.39等のリリース版ソースを使った64bitビルドが欲しいといったリクエストでも構いません。こちらも一時の手間で済みますので楽です。

>>531
staticもsharedも、特に今迄と変わり無くビルド可能です。

534:デフォルトの名無しさん
09/05/09 11:38:33
Signals と Signals2 との違いって、マルチスレッド対応だけ?
シングルスレッドなプログラムなら、かえって Signals のままのほうが
排他制御なくて性能いいとかあるんかな。

535:デフォルトの名無しさん
09/05/09 12:38:51
>>534
ライブラリビルド不要とも書いてあったな。

536:デフォルトの名無しさん
09/05/09 15:34:23
>>534
dummy_mutexなんてもんもあるでな。

537:デフォルトの名無しさん
09/05/10 00:46:30
↓ 更新しました。link=shared runtime-link=sharedでmpiとzlib絡みのエラーが発生して
計12ファイルが欠損しておりますが追々改善していきます。毎度人柱仕様で申し訳ございません。
URLリンク(booster.x0.to)
以下更新内容の一部
[Spirit]
Spirit.Support: Renamed policy namespace for iterators
Spirit: fixed member initialization sequence
Spirit: added some parenthesis' avoiding macro expansion of certain names
[Archive]
fix for error in handling compilers which don't handle has_new_operator
[Config]
Add __GXX_EXPERIMENTAL_CXX0X__
[Units]
Allow specifing the default conversion using either base units or units.
[wave]
Update Wave to cope with some namespace reshuffling in Spirit
Wave: Pending fix after namespace change in Spirit2 iterators
[Type_traits]
new test of empty aligned_storage
[mpi]
Fixes for bugs 2586 and 2594

[Regex]
Add support for named sub-expressions.
[Utility]
eliminate noisy warning on msvc, fixes #2993

それと>>531の件ですが、確かにmt-s,mt-sgdがビルド出来なくなっていました。
ただ、bjamのオプションを弄ったりすると一部ビルドが出来たり
ビルドログを取ってみるとエラーメッセージがおかしかったりとbjamの挙動が良く分かりませんのでこちらも検証していきます。

538:デフォルトの名無しさん
09/05/10 01:32:26
まだ軽くしか調べていませんが、どうもbjamか設定ファイルがバグっているみたいですね。
--build-type=completeやlink=static runtime-link=staticとすると何故か
error: link=shared together with runtime-link=static is not allowed
error: such property combination is either impossible
error: or too dangerious to be of any use
と表示されますが、--build-type=complete --with-mpiやlink=static runtime-link=static --with-mpi(--with-pythonでも可)とすると
ビルドが通ります(但しmpiやpython関連ライブラリのみですが)。

539:デフォルトの名無しさん
09/05/10 07:39:46
そのエラーは正しいとしか思えない。
というのも、例えばVCの場合、CRTのライブラリには、いくつものバージョンがある。
それこそ、SPごとにバージョンが変わる。
CRTをスタティックリンクするが、Boostをダイナミックリンクするということは、
CRTのバージョンが異なる可能性があり、危険だと思う。

そしてそもそもCRTのスタティックリンク自体が、VCでは推奨されていない。
確か、Boostの連中の検証した所によると、スタティックリンクのCRTを使うと、
スレッド周りで、たとえ正しいコードを書いたとしても、メモリリークする場合があるらしいとかいうMLを、
どっかで見た気がする。

540:デフォルトの名無しさん
09/05/10 13:14:22
私もエラーメッセージの意味するところ自体は正しいと思いますし、link=shared runtime-link=staticは
1.38以前からビルドは不可能でした。ただ、1.39のbjamビルドでは
link=shared runtime-link=staticではなく
link=static runtime-link=staticや--build-type=completeでも
error: link=shared together with runtime-link=static is not allowed
と表示されてしまい、
link=static runtime-link=static --with-python(or mpi)としたり
--build-type=complete --with-python(or mpi)とすると
ビルドが通ってしまう点がよく分かりません。
1.38と1.39のdebugビルド時のbjamの動作の違いは
Boost 1.38
static static: libboost_...-vc90-mt-sgd-1_38.lib
static shared: libboost_...-vc90-mt-gd-1_38.lib
shared static: error: link=shared together with runtime-link=static is not allowed
shared shared: boost_...-vc90-mt-gd-1_38.lib + boost_...-vc90-mt-gd-1_38.dll

(続く)

541:デフォルトの名無しさん
09/05/10 13:15:30
(続き)
Boost 1.39
static static: error: link=shared together with runtime-link=static is not allowed
(--with-python(or mpi)時のみlibboost_...-vc90-mt-sgd-1_39.lib)
static shared: libboost_...-vc90-mt-gd-1_39.lib
shared static: error: link=shared together with runtime-link=static is not allowed
shared shared: boost_...-vc90-mt-gd-1_39.lib + boost_...-vc90-mt-gd-1_39.dll
です。そのCRTスタティックリンク非推奨の件でstatic staticが封印されたのかとも思いましたが、
CMakeでVC用のプロジェクトファイルを作成してビルドするとmt-s(release static static)やmt-sgd(debug static static)が作成されましたので、
--build-type=completeがエラー扱いになってしまう事と併せるとbjam(の設定ファイル)の不具合ではないかと考えています。

上記とはあまり関係ありませんが、libs_for_build_boost.rarをアップデートしました。URLリンク(booster.x0.to)
zlibに似た何かをzlibと勘違いしてビルドしてしまっておりましたので正しい物に差し替えました。申し訳ございません。
これで、ビルド不可能なBoostライブラリはboost_graph_parallelのlibとdllのみ(mpi絡みのエラー)となります。
boost_graph_parallelはログを見ると32bit版がリンクエラーなのに対して
64bit版ではコンパイルエラーで引っ掛かっているのでソースが怪しい気がしなくもないですが・・・。
只、readmeやhow_to_build.txt内のbjamビルドコマンドについては上記の件もあり私自身混乱気味ですので、参考程度にして下さい。

542:デフォルトの名無しさん
09/05/10 15:31:21
regex
date_time
program_option
serialization
thread
filesystem
(system)

要ビルドのライブラリで使うのはこれぐらいかなぁー

543:デフォルトの名無しさん
09/05/10 16:53:36
>>542
十分つかってるな。

544:デフォルトの名無しさん
09/05/10 17:14:49
むしろ使ってないのを挙げた方が早いなw

545:デフォルトの名無しさん
09/05/10 18:07:22
static-staticビルド不可の原因が半分掴めました。対症療法的なビルドは可能になりました。
svn rev.52330(April 11,2009)での\Jamrootの更新で、160行目周辺の
if <link>shared in $(properties) && <runtime-link>static in $(properties) &&
! ( <toolset>cw in $(properties) )
{
return <build>no ;
}

if <link>shared in $(properties) && <runtime-link>static in $(properties) &&
! ( <toolset>cw in $(properties) )
{
ECHO "error: link=static together with runtime=link is not allowed" ;
ECHO "error: such property combination is either impossible " ;
ECHO "error: or too dangerious to be of any use" ;
EXIT ;
}
に変更されています。EXIT ;をreturn <build>no ;にすれば旧来通りの動作(上記エラーメッセージが2度表示されますが)になりstatic-staticがビルドされます。

546:デフォルトの名無しさん
09/05/10 18:08:02
但し、RegexのICUサポートを有効にしている場合は
Skipping build of: libs/regex/build/icucore <build>no in common properties ...
と表示され、ビルドされたlibboost_regex-vc90-mt-sgd.libは
EXIT ;をreturn ;(唯戻るだけ)にして上記Skippingメッセージが表示されない状態でビルドした同libとファイルサイズもMD5も一致しません。
ログ(return <build>no ;:URLリンク(booster.x0.to) return ;:URLリンク(booster.x0.to))を見ると
作業フォルダこそ違え同じ様な動作をしている様に見えるのですが、return ;でビルドした方が僅かにファイルサイズが大きくなります。
しかしそもそもstatic-staticでは実行されない筈のルーチンが実行されたり
エラーメッセージが2度表示されしまっている(エラー処理ルーチンを2度通っている)時点で何かがおかしいのですが、
今迄エラーメッセージを発せずICU絡みでしか実害が無い(と思われる)仕様でしたので問題が隠蔽されていた様です。
bjamとJamrootをそれぞれrev.38329(August 1,2007)とrev.38534(August 9,2007)迄戻してもstatic-staticがこのルーチンに引っ掛かっていましたので、
相当昔からのバグの様です。おかしいのは設定ファイルではなく恐らくbjamのソースの方でしょうか。
EXIT ;をreturn ;にしてエラーを完全に無かった事にしてしまうのが対症療法としては現状での最善と思われますが、
この場合、禁止されているshared-staticでも52回エラーメッセージを繰り返した後ビルドを始めてしまいますのでご注意下さい。

547:デフォルトの名無しさん
09/05/10 22:18:43
回避方法乙。
早速使わせてもらいます。
ゲームの場合はstatic-staticじゃないとサポート面倒なんで…

548:デフォルトの名無しさん
09/05/10 23:24:58
Bおおst、buildすら困難になって来たのか

549:デフォルトの名無しさん
09/05/11 00:13:20
俺BoostをLinuxで使うよ君だけど
そのままBuid出来た事なんて一度もないよ
いつもJamファイルと格闘する羽目になる
Windowsはそうでもないのか、うらやましいのぅ

550:デフォルトの名無しさん
09/05/11 02:00:46
VCでCRTのスタティックリンクはもういい加減にやめた方がいいと思うがなぁ。
だいたい何で必要なんだ。
ランタイムのインストーラーの他に、
DLLをEXEと同梱することもライセンス的に認められているというのに。

551:デフォルトの名無しさん
09/05/11 11:07:34
>>549
ぜひ最後の
make instal
コマンドlを
checkinstall
に変えて
で同時にできたdebパッケージを配布してほしい

552:デフォルトの名無しさん
09/05/11 17:34:47
>>550
DLLの検索に失敗して起動できなかったりすることがあるんだよな
調べるのも面倒だからスタティックリンクする
side-by-sideとか意味わかんね

553:デフォルトの名無しさん
09/05/11 21:51:08
>>474

亀レスだが
URLリンク(boost-sandbox.cvs.sourceforge.net)
を使ってます。
ただ、ublas は LAPACK と要素の格納方法が違うので、
hermitian_matrix とかに対して heev が使えないとか、けっこう不便な所がある。



554:デフォルトの名無しさん
09/05/11 22:07:13
>>549
VCだといつも問題なくライブラリビルドできるね。


555:デフォルトの名無しさん
09/05/11 22:20:51
>>552
そういやそれなんで起こるんだろうな。
対処法があればいいんだが。

556:デフォルトの名無しさん
09/05/11 23:30:35
プライベート配置でちゃんとマニフェスト置いておいても失敗するなんて
_BIND_TO_CURRENT_VCLIBS_VERSIONがらみくらいしか知らんがどうなんだろ

そういやURLリンク(booster.x0.to)さんのビルドDLLは、埋め込みマニフェストのCRTバージョンが
9.0.21022.8になってるから、SP1のmsvcr90.dllを配置すると死ぬかもね

557:デフォルトの名無しさん
09/05/12 00:10:17
その心配は要らないはず。
SP1版ランタイムが存在する環境では、バージョンリダイレクトの指定によって、
マニフェストで無印版msvcr90.dllを指定したアプリでも、SP1版ランタイムが読み込まれる。
(たしか無印版CRTをプライベート配置している場合でも)

蛇足だけど、そのことを知ってから自分は
_BIND_TO_CURRENT_VCLIBS_VERSION使うのやめた。

558:デフォルトの名無しさん
09/05/12 12:52:07
戻り値をスマートポインタで返す時に、
scoped_ptrはコピーが禁止されてるから普段はshared_ptrを使ってるんだけど、
コピー禁止+暗黙の型変換でscoped_ptrにできるオブジェクトを作って
それを返してやればいいんじゃね?ってことを思いついた。
今実行できる環境にないからアレだけど……

559:デフォルトの名無しさん
09/05/12 13:32:27
>>558
それは auto_ptr の仕事じゃないか?

560:デフォルトの名無しさん
09/05/12 14:39:24
>>559
Pythonのwith文やC#でusingを使うように
ファクトリ関数の戻り値をスコープ管理したい時に、
生のポインタを返してscoped_ptrで包んでもいいんだけど、
忘れたら嫌なのでスマートポインタで返したい、というイメージ。

auto_ptrだとコピー可能だし、所有権がどうのとか考えるのがめんどくさい。
あくまで戻り値を返す瞬間、一回だけコピーできるようにしたい。

561:デフォルトの名無しさん
09/05/12 14:43:35
>>560
だからまさにそれauto_ptrだって。

562:デフォルトの名無しさん
09/05/12 15:41:56
const auto_ptr=getHogefuga();
みたいなかんじ?んなわけねえか?w

563:デフォルトの名無しさん
09/05/12 18:59:19
>>562
558, 560だけど、const auto_ptrが駄目な理由が分かんなくなってきた……
どこに問題があるか教えてくれるとありがたいんだけど

564:デフォルトの名無しさん
09/05/12 19:10:11
const auto_ptrでいいよ。
const auto_ptrはscoped_ptrのようなものだ。少し違うけど。

565:デフォルトの名無しさん
09/05/12 19:20:20
>>563
const じゃ破壊的代入できないだろ?constでないメンバ関数呼べないんだから
そういうこと?

566:デフォルトの名無しさん
09/05/12 19:27:32
早くunique_ptrがauto_ptr/scoped_ptrに取ってかわるときが来てほしい。

567:558, 560
09/05/12 19:27:43
ん、const auto_ptrを戻り値の型に指定しても右辺値がconstになるだけで
constで受けることを強制できるわけじゃないのか。
受ける時に気をつけるんだったら別にscoped_ptrでもいいし、
なんだかなあって感じだ

568:558, 560
09/05/12 19:47:37
と、俺の提案にも穴があることを発見してしまった
暗黙の型変換演算子も一応関数なので、
scoped_ptr型を返す関数を定義してやんなきゃいけないが、
戻り値を返す時にコピーが発生するので無理だ。
ざんねん!! わたしの ぼうけんは これで おわってしまった!!

C++0xのunique_ptrとかは右辺値参照とか使ってこれを回避してるのかな?

569:デフォルトの名無しさん
09/05/12 20:25:21
scoped_ptrにauto_ptrで初期化するコンストラクタがあるから、auto_ptrで返してscoped_ptrで受け取ればいいんじゃね?
なぜかドキュメントに載ってないが

570:デフォルトの名無しさん
09/05/13 04:17:00
>>569
559 の時点でゴールが示されてるのに、なぜかたどり着けない 558 が哀れだ。

571:デフォルトの名無しさん
09/05/13 08:32:52
>>568
C++03 の unique_ptr 実装はなかなかうまい方法で右辺値から(のみ)の初期化を実現してる。
それを真似することで、所有権移動禁止だが右辺値初期化だけ可能な scoped_ptr を
作ることはできる…が、それはもはや scoped じゃないという気も

572:デフォルトの名無しさん
09/05/13 10:37:34
みんな意地悪だな。これでいいんだろ?
std::auto_ptr<int> f();
boost::scoped_ptr<int> p(f());

>>571
「C++03 の unique_ptr 実装」って何? auto_ptr の間違い?

573:デフォルトの名無しさん
09/05/13 22:43:40
>>572
ggrks
URLリンク(home.roadrunner.com)

574:デフォルトの名無しさん
09/05/14 14:40:30
[Review Results] Range.Ex library accepted into boost
URLリンク(groups.google.com)

いつのまにかAcceptされてたんだね。これでやっとRange-Base Algorithmsが大手を振って使える

575:デフォルトの名無しさん
09/05/14 21:40:39
Boost.Oven が誕生することはなかったか…

そいや Egg ってなんで蹴られたんだっけ? ドキュメント?

576:デフォルトの名無しさん
09/05/14 22:42:56
>>574
Range-Base Algorithmsって何だい?

577:576
09/05/14 22:45:29
>>574
ちょっと見た感じ、Boostにふさわしい変態級の記法をしているように見えるのだが
よく分からんのだ。

578:デフォルトの名無しさん
09/05/14 23:13:29
>>575
誰もレビューしてくれなかったんじゃなかったっけ?

>>576
STLアルゴリズム、std::hoge(c.begin(), c.end(), foo)をboost::hoge(c, foo)と書けるようになるラッパ。
今までBoost Vaultにくすぶっていた部分。

>>576
hoge | foo | barのようなやつのことだな。それはレンジアダプタ。

同類のOvenスレより
スレリンク(tech板)
> ようするに、| 演算子でパイプ(Unix的なあれ)を作ったC++テンプレートライブラリ。

579:デフォルトの名無しさん
09/05/15 00:21:57
Egg-Oven-Range か・・・なるほど


580:デフォルトの名無しさん
09/05/15 00:37:16
>>577
ModernのAndrei Alexandrescuのこれでも読むといい
URLリンク(groups.google.com)
今が旬だ


581:デフォルトの名無しさん
09/05/15 19:49:24
更新しました。今週は更新の殆どがSpiritとGraphでした。尚、svnは1.40に移行しました。
亦、今回からビルドログを添付する様に致しました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Spirit]
Spirit: Fixing ADL problem in example karma/calc2_ast_vm.cpp
Spirit: Boost.Endian will be used starting Boost V1.41 only
Spirit: Fixed a problem in static lexer generator
[Dynamic_bitset]
Minor comment edit
[Unorderwd]
Cherrypick some unordered container changes from sandbox.
Merge emplace support for sandbox - but without move support.
[Graph_parallel]
Fixed uninitialized variable warning
[Regex]
Add support for named and/or subexpressions with indexes > 99 in conditional format expressions.
[Graph]
Added boost:: qualifications to next, using patch from bug 3013, fixing #3013
Added a new labeled graph adaptor that maps vertices to user-defined key types.
Added missing labeled graph file.
[Pending]
Added a specialization of retag_property_list that will correctly retag
Added a metafunction to determine if a property is no_property.
[Filesystem]
Filesystem: fix #3008, improving namespace discipline to avoid naming conflicts with the C++0x std library.
[Smart_ptr]
Merged in smart_ptr changes from the sandbox/boost0x branch created for
BoostCon '09. This adds move semantics to weak_ptr and intrusive_ptr.
[Exeption]
exception_ptr improvements, documentation update.

582:デフォルトの名無しさん
09/05/16 21:41:28
>>581
お疲れ様です!

583:デフォルトの名無しさん
09/05/16 21:42:54
class rational :
less_than_comparable < rational<IntType>,
equality_comparable < rational<IntType>,
less_than_comparable2 < rational<IntType>, IntType,
equality_comparable2 < rational<IntType>, IntType,
addable < rational<IntType>,
subtractable < rational<IntType>,
multipliable < rational<IntType>,
dividable < rational<IntType>,
addable2 < rational<IntType>, IntType,
subtractable2 < rational<IntType>, IntType,
subtractable2_left < rational<IntType>, IntType,
multipliable2 < rational<IntType>, IntType,
dividable2 < rational<IntType>, IntType,
dividable2_left < rational<IntType>, IntType,
incrementable < rational<IntType>,
decrementable < rational<IntType>
> > > > > > > > > > > > > > > >
ってrationalの定義にあるんだが、これは何??
もしかしてこうするとEmpty Base Optimizationが働くとか!?

584:デフォルトの名無しさん
09/05/16 21:49:22
>>583
Boost::operatorで自明な演算子定義を省略してるんだろ
こうしとけば+=があれば+は勝手に実装される

585:デフォルトの名無しさん
09/05/16 21:57:53
ちなみに、継承のアクセサを省略(private継承)してるのでis-aの関係ではなく、
どちらかというとmixinに近いことになってる。

586:583
09/05/16 22:05:31
>>584
ああ、Boost.Operatorsライブラリはしってるんだけど、
このテンプレートにテンプレートを重ねる変態的記法に驚いたのだ。

で、「Empty Base Optimizationが働くとか!?」と思った。

587:583
09/05/16 22:06:53
つまり普通だったらprivateの多重継承を考えるじゃない。
それを使わず、テンプレートにテンプレートを食わせてるじゃん。

588:デフォルトの名無しさん
09/05/16 22:27:44
URLリンク(www.boost.org)
ドキュメントにかいてあるぞ

589:583
09/05/16 22:30:46
ありがとう。
やっぱEmpty Base Optimizationね。

590:デフォルトの名無しさん
09/05/16 22:39:29
これ使った場所でちょっと複雑な原因不明のエラーが起こったら
デバッグできる自信ない・・・

591:デフォルトの名無しさん
09/05/16 22:50:33
自作ライブラリの実装が
boostの実装と微妙にかぶっちゃうところがあるんですけど
それってライセンス違反になるんでしょうかね?

spiritとかlambdaとかのアイディアの根幹に関わる部分じゃなく
全然一般的な実装なんですけど。
例えばユークリッドの互除法とか。

592:デフォルトの名無しさん
09/05/16 23:39:11
Boostからぱくった?
はい→ライセンス見ろ。改変おk、ソースコードからクレジットを外すなとかその程度でライセンスはクリアだ。
いいえ→結果的に同じものでも別々に作れば違う著作物。それぞれに著作権がある。堂々としろ。

593:591
09/05/16 23:49:16
>>592
ありがとうございます。別にぱくったわけではなく、結果的に若干(気にしすぎなのかもしれませんが)似てしまいました。
あと、まだはっきりとライセンスを熟読したこと無いのですが
Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

これは短いですが、全文ですよね。
熟読してきます。


594:デフォルトの名無しさん
09/05/16 23:58:48
相手の実装を知っていて、
自分も作ってみたら似てしまったというのなら、
GNUの中の人的にはアウトだな。

パクリ元がNDA結んだ仕事相手じゃなくてboostでよかったな。

595:591
09/05/17 00:00:26
実装を流用する場合に関係がありそうな部分は
二段落目
 The copyright notices in the ~
ですね。
要するに
…………………………
1.流用対象のライブラリの著作権表記
2.Boost Software License の全文
流用して作ったソースコードを開示する場合、これらを全て記載すること。
ただし実行ファイルの形ならば無制限。
…………………………
ってことですね。
ありがとうございました。

596:デフォルトの名無しさん
09/05/17 00:27:29
俺は今までバイナリでしか使ったこと無い(し、そもそも職場がboost原則禁止orz)から分からないんだが、
例えばBoost.Functionのあるソースを流用して自作ライブラリMy_Libを作り、
My_LibのソースコードをBSDライセンスで公開したい場合はどうすればいいってことになるの?

1.My_Libのソースコードに
  Boost.Functionの著作権表記と
  Boost Software Licenseの全文を記載する。
2.My_Libのソースコードに
 BSDライセンスの全文を記載する。
3.「2.」のBSDライセンスの文言にはBoost.Functionの著作権表記は関わらない。

かい?でもこれだとMy_Libを流用する第三者がMy_LibのBSDライセンスの通りに作ると
Boost.Functionの著作権表記が引き継がれなくなっちゃうよね?

だれか分かるお方、お知恵をお貸しくだされ

597:596
09/05/17 10:03:01
BSDライセンスの著作権表示の場所に
Boost.Functionの著作権表示を一緒に表示させればいいのか。


598:デフォルトの名無しさん
09/05/23 21:43:14
更新しました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Fusion]
Fusion: added explicit disambiguation for fusion::at
[Exeption]
support for exception_ptr and nesting in boost::diagnostic_information
[Dynamic_bitset]
Merge dynamic bitset from release.
[Lambda]
Avoid using namespace std; to prevent ambiguity between boost and std components. Fixes #3025
[Algorithm]
Qualify minmax with boost:: to avoid ambiguity with std::minmax. Fixes #3023
[Filesystem]
Fix Filesystem #2925, copy_file atomiticity
[Serialization]
change number of bits from unsigned int to std::size_t
[Spirit]
Spirit: Added thread safety precaution
[Regex]
Qualify lower_bound with std:: to allow regex to work with Sun CC
[Signals2]
Added ability to create a shared_connection_block which is initially not blocking.
[Graph]
Added new Graphviz parser (recursive descent); does not support subgraphs in edges yet
Fixing bug in labeled graph.
[Mpl]
Fixed a bogus preprocessor directive
[Wave]
Wave: fixed race condition

亦、libs_for_build_boost.rarもICUを4.2d04から4.2に更新しました。

599:デフォルトの名無しさん
09/05/24 11:29:42
exceptionってまだまだ付け足されるね
奥がふかいのかなあ


600:デフォルトの名無しさん
09/05/26 18:16:28
・VisualC++2008EE
・boost1.37.0のuBLAS

URLリンク(www.page.sannet.ne.jp)
の連立方程式をとくサンプルプログラムをコピペして動かしたところ

lu_factorize(A,pm);

で、例外が投げられます。

lu.hppの153行目で引っかかっているようです。
#if BOOST_UBLAS_TYPE_CHECK
swap_rows (pm, cm);
BOOST_UBLAS_CHECK (singular != 0 ||
detail::expression_type_check (prod (triangular_adaptor<matrix_type, unit_lower> (m),
triangular_adaptor<matrix_type, upper> (m)), cm), internal_logic ());
#endif

なぜだかわかりますか?

601:デフォルトの名無しさん
09/05/26 18:34:11
・VisualC++2008EE
・boost1.37.0のuBLAS

で試してみたけど、コンパイル通ったよ。
[]演算子に関してぶーたら言われたから初期化してる場所は書き換えたけど。

602:デフォルトの名無しさん
09/05/26 18:37:20
どう書き換えたのか教えてやれよwwww

603:デフォルトの名無しさん
09/05/26 18:44:13
A[0][0] = 1.0;
とか並んでる場所を全部
A(0,0) = 1.0;
みたいに書き換えただけなんだけど。
ちなみにublas使ったこと無いからこれが正しい書式なのかは知らない。
というか、こっちだとそこ書き換えないとまずコンパイルされなかったよ。

604:デフォルトの名無しさん
09/05/26 19:17:57
>>601-603
ご対応ありがとうございます。
>>603の処置はやっております。
関係ないと思って省いてしまいました。
すみません。

確かに、空のプロジェクトで作り直したところ
今度は正常に動作しました。
問題のある方は、既存のコードに埋め込んだのですが
なぜ、同じコードなのにこちらではNGなのか、まだわかっていません。
一応、FPまわりのコンパイルオプションも確認したのですが、同じでした。。
どうやら、cm(2,2)が双方で違う値を返しているみたいですが、なぞです。

605:デフォルトの名無しさん
09/05/27 04:38:09
悩んだら、とりあえずプリプロセス

606:デフォルトの名無しさん
09/05/28 21:06:02
>>604コンパイルオプションが同じでもFP変える行儀の悪いプログラム
があるとチェックに失敗するらしい。

DirectXのCreateDeviceとかがそうなんだと。ググったら出てきた。

607:デフォルトの名無しさん
09/05/30 18:47:31
更新しました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Spirit]
Spirit: added tokenize_and_parse functions taking multiple attributes
Spirit: added #pragma once to headers in include directory
[Wave]
Wave: Incorporated the changes from latest version of the flex_string class (fixes #2946)
[Graph]
Reduced graph sizes to decrease test run time; fixes #2308
Changed GraphML writer to escape strings; added test of this; fixes #2567
Added graph properties to adjacency_matrix; fixed constructors to match documentation; fixes #875
[Format]
Fix order of initialization warning. Fixes #1699
[Type_traits]
Test for: enum UIntEnum { value = UINT_MAX } is promoted to int
[Lambda]
Avoid ambiguities between boost::lambda::bind and std::bind with VC10. Fixes #3075
[Multi_index]
fixed #3076
[Graph_parallel]
Added "edges_are_sorted" to CSR test case
[Signals2]
Added a little test of a signal taking a reference argument.
Use BOOST_NO_VARIADIC_TEMPLATES instead of BOOST_HAS_VARIADIC_TMPL, etc.
[Proto]
saner default evaluation behavior for member (object|function) pointers
[Math]
Added a couple of static assertions to prevent misuse.
[Thread]
Attempts to improve the boost::thread move semantics; separated tests to give clearer ID; incorporated patch to fix issue #2062
Changed thread_specific_ptr to use a map for faster lookup, and erase empty nodes

608:デフォルトの名無しさん
09/05/31 10:58:06
boost で、実行中のプログラムのパスを取得する手段は提供されていますか?
Win32API で言う所の GetModuleFileName(NULL) ですけど、
OS を問わず使えるようなのがあればな、と。

609:デフォルトの名無しさん
09/05/31 11:12:43
ハードリンクがあるから㍉じゃね

610:デフォルトの名無しさん
09/05/31 12:07:14
int main(int, char *argv[]){
std::cout << argv[0] << std::endl;
return 0;
}

611:デフォルトの名無しさん
09/05/31 13:27:41
>>606
遅くなりすみません。
まさにそれでした!!ありがとうございます。
boostとDirectXでFP精度を合わせるようにして
対応します。

612:デフォルトの名無しさん
09/06/01 10:54:37
そういやboost::spiritって大幅な仕様変更あったの?
spirit使ってるプログラムをビルドすると、

Warning: This header is deprecated. Please use: boost/spirit/include/~

…というwarningがいっぱい出るんだ。
どこかに変更点まとめてるところないかな。

613:デフォルトの名無しさん
09/06/01 12:39:43
>>612
ちょっと前にv1からv2になったよ
v2用のドキュメントがどっかにあったはず

614:518
09/06/01 20:57:05
>>612
#include <boost/spirit/core.hpp>

#include <boost/spirit/include/classic_core.hpp>
みたいに変更になった。
・・・ような記憶がある。
試してごらん。

615:デフォルトの名無しさん
09/06/02 04:44:33
WindowsでJPGファイルを操作(表示と拡大縮小くらい)するプログラムを
書こうと思っているのですが、boost::gilを使うと簡単にかけますか?


616:デフォルトの名無しさん
09/06/02 05:02:35
boost::gilを使っても使わなくても簡単にかける

617:デフォルトの名無しさん
09/06/02 09:33:12
>>613-614
情報㌧
新しくなってたのね。

618:デフォルトの名無しさん
09/06/02 12:43:16
>>615
GDI+を使ったほうがいい

619:デフォルトの名無しさん
09/06/02 20:10:34
Boost.Seriaizationでのshared_ptrのシリアライズでCustom Deleterが
保存/復元されないようなんだが、これってどうにかならないだろうか。

620:デフォルトの名無しさん
09/06/05 23:34:25
更新しました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Detail]
detail/utf8_codecvt_facet.cpp: apply patch from ticket #2986 to quiet warnings when wchar_t is 16-bits.
[Program_options]
Qualify usage of 'exeception', now that boost also has such name
[Signals2]
Fixed bug in test.
Fixing some reference-to-reference problems with some compilers.
Added test for and fixed compile errors in signal::set_combiner()
and combiner() methods. Refs #3125.
[Random]
Fix the distribution of uniform_int.
[Property_map]
Added shared_array_property_map
[Graph]
Changed new-style named parameter code for BGL to use shared_array_property_map, greatly simplifying interface
Re-added the exterior property labeling framework under a different name
[Date_time]
Fixed a possible reading overflow in the var_string_to_int function.
The std::tm instances are zero initialized before usage in to_tm functions. Related to #1859.
[Spirit]
build_tree now has less parameters and limit lines to 80 chars.
Added a param to add() taking a rules object.
Spirit: fixed problem in lexertl library
[Expressive]
prefer mpl::if_c over mpl::if_ for better compile times
[Fusion]
reduce number of template instantiations
[Lambda]
Add result_type to lambda::ret. Fixes #1222

621:デフォルトの名無しさん
09/06/06 02:18:21
spirit v2のドキュメントはもう少し増えないかなー

622:デフォルトの名無しさん
09/06/06 02:48:39
v1からv2にすると何か良いことあるん?

623:デフォルトの名無しさん
09/06/06 03:14:27
着弾速度が音速を超えるので迎撃不可能になる

624:デフォルトの名無しさん
09/06/06 03:34:30
結果、敵の侵攻を早めてしまう可能性もある

625:デフォルトの名無しさん
09/06/06 13:37:11
>623
フォン・ブラウン乙。

626:デフォルトの名無しさん
09/06/06 23:56:41
ptr_vector の逆バージョンのようなコンテナない?

ptr_vector は

ptr_vector<A> v;
v.push_back(new A());
A a = v.front();

こういう使い方ができるけど、

vector_ptr<A> v;
v.push_back(A());
A* a = v.front();

こういう使い方をしたい。
内部構造としては std::vector と同じように連続的に持ってほしい。
無いと思ってコンテナ作成してるんだが、無いよな?

627:デフォルトの名無しさん
09/06/07 00:36:44
無いだろうなぁ。
そういうのがつまりイテレータの仕事だし。
vector<A>::iterator i = v.begin();

628:デフォルトの名無しさん
09/06/07 00:45:46
A* a = &v[0];
だとまずいのか?

629:デフォルトの名無しさん
09/06/07 00:46:29
>>627
ありがと。自作するわ。

BOOST_FOREACH でイテレータ使えるようにならないかな。

BOOST_FOREACH ( std::vector<A>::iterator it, v )
{
  ...
}

こんなかんじで。

630:デフォルトの名無しさん
09/06/07 00:53:31
>>628
std::vector<A*> を使って実装したソースがあって、
あんまりコードを変えたくないんだ。



・・・と思ったがそんなに手間じゃない気もしてきたw

631:デフォルトの名無しさん
09/06/07 00:54:26
>>629
BOOST_FOREACHを参照で受けるとかじゃだめなのか?
イテレータじゃないとだめ?

632:デフォルトの名無しさん
09/06/07 00:55:53
イテレータでいいならrange_exのfor_eachにlambda渡せばいいんじゃね?

633:デフォルトの名無しさん
09/06/07 01:01:05
>>631
なんだかこれで解決できるような気がしてきた。
既存のコード読んでやってみる。

ありがと。

634:デフォルトの名無しさん
09/06/07 01:02:41
>>632
まだ lambda 使ったこと無いんだがそんなこともできるのか!
調べてくる

635:デフォルトの名無しさん
09/06/07 01:04:14
>>634
ごめん、勘違い

636:デフォルトの名無しさん
09/06/07 14:45:37
URLリンク(atnd.org)

URLリンク(124.45.27.25:12086)
IRCNET #CRYBUTSU

637:デフォルトの名無しさん
09/06/07 17:35:00
ぶつぶつ会終わったよー

638:デフォルトの名無しさん
09/06/09 12:38:54
逆行列を求めようと、
URLリンク(www.page.sannet.ne.jp)
をコンパイルしたのですが、
以下のようなエラーが出ます。
test.cpp:33
は上記ページの lu_factorize(A,pm); になります。

/usr/include/boost/numeric/ublas/lu.hpp: In function
‘typename M::size_type boost::numeric::ublas::lu_factorize(M&, PM&)
[with M = main()::dmatrix, PM = boost::numeric::ublas::permutation_matrix<unsigned int, boost::numeric::ublas::unbounded_array<unsigned int, std::allocator<unsigned int> > >]’:

test.cpp:33: instantiated from here
/usr/include/boost/numeric/ublas/lu.hpp:137: error: no matching function for call to
‘project(boost::numeric::ublas::matrix_column<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<unsigned int, int>,
boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >&, boost::numeric::ublas::basic_range<unsigned int, int>)’

何かboostの設定が間違っているのでしょうか?

639:デフォルトの名無しさん
09/06/09 14:31:59
gcc 3.4.6 + BOOST_VERSION 103700
>g++ test.cpp -Wall
>ls
a.out test.cpp
>gcc --ver
gcc (GCC) 3.4.6 以下略
>./a.out
A = [3以下略
問題なし

[別環境]
gcc 4.1.2 + BOOST_VERSION 103301
>scp ほげほげ:./test/test.cpp .
ほげほげ's password:(はげはげ)
>ls
test.cpp
>g++ test.cpp
/usr/include/以下略。同じエラー
>gcc --ver
gcc (GCC) 4.1.2 以下略

[さらに別環境]
VC2008EE + BOOST_VERSION 103700
<memory>で警告食らったけどとりあえずコンパイル成功して動いた

boostのバージョン依存の問題かもしれません。
ひょっとしてもしかしたら、gccのバージョン依存の問題かもしれません。

640:デフォルトの名無しさん
09/06/09 19:55:03
spiritの話題がちらほらでるけど、そんなに使う場面ってある?
簡単なものなら正規表現で十分だから、俺にとっては永遠に出番のなさそうなライブラリーなんだけどなぁー

641:デフォルトの名無しさん
09/06/09 20:13:25
>>640
ちょっと複雑な設定ファイルの文法を簡単に定義できるのが便利。
bison/flexといった外部ツールを使わずにC++ですべて完結するのが良い。

642:デフォルトの名無しさん
09/06/09 20:16:10
spiritの方が大抵速いようだしな。
それでいて柔軟性もあるし

643:デフォルトの名無しさん
09/06/09 20:34:08
spiritとか使ったことがないが、コンパイルにやたらと時間がかかりそうで怖いんだが。

644:デフォルトの名無しさん
09/06/09 20:38:28
コンパイルに時間が掛かるのはその通りだが、今時大した問題でも無いと思う。
まずは使ってみて便利さとコンパイル時間を天秤にかければ良いだろうな。

645:デフォルトの名無しさん
09/06/09 21:33:44
コンパイルするのにメモリもかなり食う
まぁ一度コンパイルしてしまえば(文法規則が変わらない限り)関係ない話だし

646:デフォルトの名無しさん
09/06/09 21:36:27
>>640
>>643

Boost.Spiritは、ぜひとも一度使ってみて、
Boost.Lambdaと同様のあまりの変態さにおののいてみてください。
すげーよまじで。

647:デフォルトの名無しさん
09/06/10 01:21:08
yacc と比較して spirit の構文解析の速度はどうですか?
spirit で何度か C 風文法を解析するプログラムを作ったのですが
パース時に後戻りが多いような気がするのですが。

648:デフォルトの名無しさん
09/06/10 03:36:23
>>647
実際に同じ文法を定義してベンチマーク取ったわけではないけど、spiritは
再帰下降パーサだからバックトラックが遅いんだろうな。
効率が気になる程に長いファイルをパースするなら、やっぱりLALRパーサの
bison(yacc)を使った方が良いと思う。

649:デフォルトの名無しさん
09/06/10 09:00:32
v2の方はコンパイルでアホのようにメモリ喰うな
ちょっとした文法でも1GB普通に超える

650:デフォルトの名無しさん
09/06/12 19:34:55
更新しました。bjamでのビルドに於いて、"--build_all"オプションが削除されました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Graph]
Reverted old version of CSR graph for compatibility, with a #define to switch between the modes; cleaned up interface of new CSR graph; fixed tests and docs accordingly
Changed to shared_array_property_map
Sped up out_degree() and related functions for new interface
[Python]
Allow duplicate enum values. Fixes #2744
[Example]
examples of external main usage
typo
[Regex]
Simplify and fix PP logic.
[Impl,Exeption,Mpl,Detail,Smart_ptr]
avoid C style casts
[Numeric]
Fix a couple of typos in the ublas documentation. Fixes #3056, #3057.
[Variant]
Support BOOST_NO_TYPEID and BOOST_NO_IOSTREAM in Boost.Variant. Fixes #3051.
[Spirit]
Spirit: added placeholders for lexer semantic actions
Spirit: Lot of work done in Lexer, fixed bugs, added support functions, refactored code
[Proto]
virtual_members get proto_arity_c
[Serialization]
Update include from boost/pfto.hpp to boost/serialization/pfto.hpp. Refs #3062.
[Signals2]
Added a copy of Thorsten Ottosen's auto_buffer into signals2/detail
and used it to replace stack_allocator/stack_vector (which worked
on popular compilers but were not strictly standards conforming).

651:デフォルトの名無しさん
09/06/12 20:02:43
foreach ( int a, boost::assign::list_of ( 1 ) ( 2 ) ( 3 ) )
{
  ...
}

でコンパイルエラーが出るんだが、こういうのは無理?

e:\boost\boost\assign\list_of.hpp(163) : error C2661: 'boost::foreach_detail_::rvalue_probe<T>::rvalue_probe' : 2 個の引数を伴うオーバーロードされた関数はありません。

652:デフォルトの名無しさん
09/06/12 21:05:22
boost::flyweight<std::string, boost::flyweights::set_factory<std::less<boost::mpl::_2> > > fw1("1");
std::cout << &fw1.get() << "\n";

boost::flyweight<std::string, boost::flyweights::set_factory<std::less<std::string> > > fw2("1");
std::cout << &fw2.get() << "\n"


以下の4つソースは全て同じ結果になることを期待していたのですが、同じ結果になりません。

(1)
boost::flyweight<std::string> fw1("1");
std::cout << &fw1.get() << "\n";

(2)
boost::flyweight<std::string, boost::flyweights::hashed_factory<> > fw2("1");
std::cout << &fw2.get() << "\n";

(3)
boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<boost::mpl::_2>, std::equal_to<boost::mpl::_2> > > fw3("1");
std::cout << &fw3.get() << "\n";

(4)
boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<std::string>, std::equal_to<std::string> > > fw4("1");
std::cout << &fw4.get() << "\n";


(1)と(2)は同じ結果になりますが、(3)と(4)が(1)や(2)と同じ結果にならないのは、どうしてでしょうか?

(1)と(2)に関してここにも書いてるので、当然な結果・・・
URLリンク(www.boost.org)


653:652
09/06/12 21:06:41
余計なソースまで貼ってしまったので、再度投稿します。

以下の4つソースは全て同じ結果になることを期待していたのですが、同じ結果になりません。

(1)
boost::flyweight<std::string> fw1("1");
std::cout << &fw1.get() << "\n";

(2)
boost::flyweight<std::string, boost::flyweights::hashed_factory<> > fw2("1");
std::cout << &fw2.get() << "\n";

(3)
boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<boost::mpl::_2>, std::equal_to<boost::mpl::_2> > > fw3("1");
std::cout << &fw3.get() << "\n";

(4)
boost::flyweight<std::string, boost::flyweights::hashed_factory<boost::hash<std::string>, std::equal_to<std::string> > > fw4("1");
std::cout << &fw4.get() << "\n";


(1)と(2)は同じ結果になりますが、(3)と(4)が(1)や(2)と同じ結果にならないのは、どうしてでしょうか?

(1)と(2)に関してここにも書いてるので、当然な結果・・・
URLリンク(www.boost.org)

654:デフォルトの名無しさん
09/06/14 13:13:18
boost::typeクラステンプレートって何に使うの?

適当な引数として
boost::type<t>* = 0
のように使っているようだが、意図がよく分からん。


655:デフォルトの名無しさん
09/06/14 15:17:09
>>654
C++は関数テンプレートの部分的特殊化ができないが、オーバーロードを使って同じような事ができる。
boost::type<Hoge>とかboost::type<Fuga>とか引数を変えてオーバーロードし、
Function(x, boost::type<Hoge>());みたいな感じで呼び出す。
boost::type<Hoge>はコンパイラの最適化で消えるため、実行時のコスト0で実現できる。

656:654
09/06/14 16:06:02
>>655
ふーむ。。。

template <typename TIPE>
void Function(int x){~};
とでも定義しておいて
Function<TYPE>(x);
と呼び出すんじゃだめなのかい?

657:デフォルトの名無しさん
09/06/14 18:02:25
>>656
>>655 はこういうことだと思う

template<class T>
void f(T, ...)
{
std::cout << "T";
}

template<class T>
void f(T*, boost::type<T>)
{
std::cout << "T*";
}


int main()
{
double d = 0;
int i = 0;
f(d);
f(&i, boost::type<int>());
f(&d, boost::type<double>());

}

658:656
09/06/14 21:10:20
>>657
悩んだ末、何となく意味が分かった気がする。
部分特殊化で
template<class TYPE *>
void f<TYPE *>(TYPE *, ...)
としたくても出来ないから、
普通の型用とポインタ型用の2つを多重定義するオーバーロードで
似たようなことをしている訳か。

二人ともありがとう!

659:655
09/06/14 22:31:03
>>656-658
言いたかったのは、

Modern C++ Design 30ページより
> ・クラス・テンプレートのメンバ関数については完全な特殊化ができるものの、メンバ関数の部分的な特殊化はできません。
> ・ネームスペース・レベルにおける関数(非メンバ関数)の部分的な特殊化はできません。
> ネームスペースレベルにおけるテンプレート関数に対して許されている機能のうち、部分的な特殊化に最も近いものはオーバーロードです。
> つまり実用上は、関数パラメータに対してのみ(戻り値や内部的に使用される型は適用できません)細かい粒度の特殊化能力を与えることができるわけです。例えば:
> template <class T, class U> T Fun(U obj);// 一次テンプレート
> template <class U> void Fun<void, U>(U obj);// 部分的な特殊化(不正)
> template <class T> T Fun(Windows obj);// オーバーロード(正当)

そして
template <class T> void Function(T x, Hoge/*ダミー*/);
ではなく
template <class T> void Function(T x, boost::type<Hoge>/*ダミー*/);
とすることによって実行速度に影響を与えずオーバーロードを解決できる(boost::type<T>のサイズが0のため)。

660:655
09/06/14 22:33:31
オーバーロードというのは
template <class T> void Function(T x, boost::type<Hoge>/*ダミー*/);
template <class T> void Function(T x, boost::type<Fuga>/*ダミー*/);
っていうこと。

661:658
09/06/15 07:05:57
>>659
ふーん、なるほど。
Boostでやたら多用されているのも分かる気がしてきた。

662:デフォルトの名無しさん
09/06/15 21:47:30
素朴な疑問です。

shared_ptrやscoped_ptrには下記のオペレータがあります。
T& operator*() const;
T* operator->() const;
実装から考えれば全くその通りだと思います。

でも生ポインタを抽象化するという役割を考えると、
下記の方が理にかなっているように思えてなりません。
const T& operator*() const;
const T* operator->() const;
T& operator*();
T* operator->();

後者がNGで、前者でなければならない理由とかがあるのでしょうか?

663:デフォルトの名無しさん
09/06/15 21:50:02
T const* と T* const の違いを考えてみればいい。

664:デフォルトの名無しさん
09/06/15 22:15:29
>>663
なるほど!
確かにポインタ自身のconstを考えると納得です。
すっきりしました。
ありがとうございました。

665:デフォルトの名無しさん
09/06/16 15:07:43
継続はいつ実装されるんだ

666:デフォルトの名無しさん
09/06/20 22:21:29
更新しました。
URLリンク(booster.x0.to)
以下更新内容の一部
[Graph]
Changed function types to enums and removed include of iostream; refs #3134
Added constructors from multi-pass unsorted, filtered edge lists; refs #3134
Added extra named parameters for McGregor maximal common subgraph algorithm; contributed by Michael Hansen; refs #3134
[Functional]
Try to avoid float to int warning when a float function doesn't exist. Refs #3171.
[Spirit]
Spirit: Added operator safe_bool to lexer token type
Spirit: Simplified multi_pass iterator
Spirit: Fixing bogus assertions
Fixup to add() again for Hartmut.
Spirit: Made dummy token constructor explicit
[Random]
Supress warnings from narrowing conversions.
[Fusion]
introduces unfused adapter
fix trac issue #1608
[Proto]
accomodate fusion:vector0 interface change
[Graph_parallel]
Fixed bugs in test case; refs #3134
Fixed warnings; refs #3134
[Python]
Use appropriate default values for global and local dicts.
[Impl]
Fixed support for CRT hooks, it was not working properly with catch_system_errors=no

667:デフォルトの名無しさん
09/06/20 22:38:49
これは乙じゃなくてなんたらかんたら

668:デフォルトの名無しさん
09/06/27 05:07:54
program optionsライブラリって機能の割にはコンパイルしてlib用意しなきゃダメなんだね
OSに依存することやってるわけでもなさそうなのに何故なんだぜ?

669:デフォルトの名無しさん
09/06/27 10:26:24
コンパイラに依存することやってたと思った

670:デフォルトの名無しさん
09/06/27 19:08:43
>>668
テンプレートやインライン関数でないものを含んでいるんじゃないの

671:デフォルトの名無しさん
09/06/27 20:44:52
program_optionsのファイル読み込みはいらないよなぁ
シリアライズの方が手っ取り早いし、ちゃんとやるならspirit使うし

672:デフォルトの名無しさん
09/06/27 21:53:00
program_optionsはBoostに含まれるにしては割と
出来が良くない気がする。
まあライセンスが緩いBoostだから、いっぱいあるのは俺は歓迎だけどさ。

673:progress_display
09/06/27 22:16:05
俺もそう思う

674:program_options
09/06/27 22:36:10
>>673
お前にだけは言われたくない

675:672
09/06/27 22:38:28
>>674
まあまあ。
喧嘩うるなよ。

676: ◆/91kCCQXBo
09/06/28 01:39:40
>>113 ソートのアルゴリズムは習ってないということで。
#include <stdio.h>
#include <stdlib.h>
struct seiseki {
  char name[20];
  int order[6];
} seito[] =
  {{"太郎",80,90,75,70,70}, {"次郎",70,85,80,80,85}, {"三郎",75,95,65,90,95}, {"四郎",65,70,80,75,80},
   {"春子",90,100,85,90,85},{"夏子",100,95,80,85,80}, {"秋子",60,75,90,70,85}, {"冬子",85,80,85,90,95}};
int kamoku;
int cmp(const struct seiseki *a, const struct seiseki *b) {
  int t = a->order[kamoku] - b->order[kamoku];
  return (t==0)?0:(t>0?1:-1);
}
int main() {
  int i, array_size = sizeof(seito)/sizeof(*seito);
  char s_kamoku[6][10] = {"国語","算数","理科","社会","英語","合計"};
  for(i=0; i<array_size; i++) {
    seito[i].order[5] = seito[i].order[0] + seito[i].order[1] +
      seito[i].order[2] + seito[i].order[3] + seito[i].order[4];
    printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
      seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
  }
  for(kamoku=5; kamoku>=0; kamoku--) {
    printf("\n%sの点数で並び替え\n", s_kamoku[kamoku]);
    qsort(seito, array_size, sizeof(*seito), (int (*)(const void*, const void*))cmp );
    for(i=0; i<array_size; i++) {
      printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
        seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
    }
  } return 0;
}

677:デフォルトの名無しさん
09/06/28 01:42:34
宿題スレの誤爆?

678:shared_ptr
09/06/28 08:25:16
includeするだけで使えるってのがウリの一部だというのに・・
本当使えないなモマイラは

679:mpl
09/06/28 11:56:22
>>678
あんなクソでかいライブラリをコンパイルするのなんて待ってられないよなw

680:spirit
09/06/28 15:46:58
同意

681:デフォルトの名無しさん
09/06/28 16:10:57
おまいらおもろいなw

682:noncopyable
09/06/28 17:27:03
>>678 >>679 >>680

おまえら、俺様の前に跪けよな。

683:xpressive
09/06/28 20:32:19
regexはいらない子

684:デフォルトの名無しさん
09/06/28 20:38:01
regexの方がコンパイル速度速いだろ?

685:デフォルトの名無しさん
09/06/28 20:41:15
>>684
俺は
「Boost.Regexは動的正規表現だから、
ユーザーに正規表現文字列を入力してもらって
動的な検索を提供できるのでは」
と思っているのだが。
そんな機会が無くて試したこと無いけど。

Boost.Xpressiveもいる子

686:デフォルトの名無しさん
09/06/28 20:51:01
xpressiveにも動的正規表現処理はあるんだよ。

687:デフォルトの名無しさん
09/06/28 20:54:31
>>686
マジか!
じゃあもうBoost.Regexは…

…いや、なんでもない。

688:デフォルトの名無しさん
09/06/28 21:04:41
残念ながらC++0xに採用されるのはboost::regexなのだよ。

689:parameter
09/06/28 21:17:07
お前らあまりprogram_optionsいじめるなよ

690:boost::tuple
09/06/28 21:28:29
tr1にも入ってるし、僕はいる子ですよね!

691:687
09/06/28 21:29:53
tr1に入るのがBoost.Regexなのは、
歴史的な理由?
つまりある程度枯れているから信頼性があるとか?



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch