Boostを語れゴラァ part5
■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS
2007/10/18(木) 08:09:35過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/
■関連サイト■
Boost C++ Libraries
http://www.boost.org/
Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/
Let's Boost
http://www.kmonos.net/alang/boost/
boost info
http://shinh.skr.jp/boost/
0381デフォルトの名無しさん
2008/01/15(火) 03:24:540382デフォルトの名無しさん
2008/01/15(火) 14:22:110383デフォルトの名無しさん
2008/01/15(火) 18:52:21explicit operator bool() 装備
代入でmoveはできず、std::move()が必要
こんなとこだっけ?
まあ似たようなもの2つあると初心者は混乱しそうだが
0384デフォルトの名無しさん
2008/01/20(日) 11:36:15b の内容全てを a の後ろに移動したいのですが、
そういうことはできますか? 出来る限り簡単な方法で。
0385デフォルトの名無しさん
2008/01/20(日) 12:29:25std::copy とか使えないのかな
0386デフォルトの名無しさん
2008/01/20(日) 13:04:05常に false を返す比較関数を使って merge する方法は思いつきましたが、
何かエレガントじゃないというか・・・。
>>385
コピーじゃなくて移動なんです。
a の最後に b の要素を付け加えて b は空にしてしまう、という形ですが、
内部的には単なるノードのつけかえで実現されるのがベストです。
0387デフォルトの名無しさん
2008/01/20(日) 13:38:590388デフォルトの名無しさん
2008/01/20(日) 15:08:07代わりに transfer というのがありました。
ありがとうございました。
0389デフォルトの名無しさん
2008/01/21(月) 23:08:31http://www.cmake.org/Bug/view.php?id=6257
これでboostのpathをmakeに書かなくてもよくなったのかな
0390デフォルトの名無しさん
2008/01/22(火) 00:26:18|← reject| boostの中の人 singleton ユーザー
. ̄.|| ̄ ̄ ┗(^o^ )┳(`Д´)┳(^o^ )┛≡=-
|| ┏┗ ┗┗ ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0391デフォルトの名無しさん
2008/01/22(火) 01:05:590392デフォルトの名無しさん
2008/01/22(火) 02:08:260393デフォルトの名無しさん
2008/01/22(火) 02:23:18つ配列使わずにコンテナを使う
0394デフォルトの名無しさん
2008/01/22(火) 02:28:240395デフォルトの名無しさん
2008/01/22(火) 02:37:11Boost.Preprocessorにそんなようなマクロがあったような気が・・・
0396デフォルトの名無しさん
2008/01/22(火) 03:12:460397デフォルトの名無しさん
2008/01/22(火) 05:22:38[review] General comment on boost::singleton
http://www.nabble.com/-review--General-comment-on-boost::singleton-td14952506.html
Tobias Schwinger
http://torjo.com/tobias/
これでつか?(T^T)
0398デフォルトの名無しさん
2008/01/22(火) 05:36:26一生孤独でおkwwwwwwシングルトンだけにwww」
俺「\(^o^)/」
0399デフォルトの名無しさん
2008/01/22(火) 06:00:180400デフォルトの名無しさん
2008/01/22(火) 06:27:47完全な、あるいは既知の欠陥がないSingletonライブラリを実装するのはほとんど不可能ってレベルで。
大体BoostでSingletonが蹴られたのってこれで何度目だ?
0401デフォルトの名無しさん
2008/01/22(火) 06:33:150402デフォルトの名無しさん
2008/01/22(火) 09:21:540403デフォルトの名無しさん
2008/01/22(火) 10:47:25ライブラリの提供という点で否定的なレビューが多くあがってた。
作者によると今回の singleton は、スレッド安全な動的初期化と、はっきりした
初期化順や破棄タイミングを提供するらしいけど、否定的な人たちに言わせれば
それらをシングルトンとは関係ない個別の機能として提供すべきだとか、そういう話。
元はこっちの巨大なスレッドね。
http://www.nabble.com/-review--Fast-track-review-of-Boost.Utility-Singleton-begins-today-to14806433.html
0404デフォルトの名無しさん
2008/01/22(火) 12:30:29http://www.boost.org/libs/pool/doc/implementation/singleton.html
やっぱり details 以下のものを使うのは良くないのかなぁ.
0405デフォルトの名無しさん
2008/01/22(火) 12:50:47何でもぶちこみすぎているから分解を検討しましょうってことだよね。
0406デフォルトの名無しさん
2008/01/22(火) 19:45:28グローバル変数よりは随分マシだけどね。
0407デフォルトの名無しさん
2008/01/23(水) 19:02:33struct Foo
{
int var;
};
vector<Foo*> vData;
...vDataの中身をいろいろ埋める
sort(vData.begin(), vData.end(), _1->var < _2->var); ←コンパイルエラー
これって実現方法あります?
これ以上複雑に書かないとだめなら普通に述語書いたほうがいいような気がする・・・
vectorがFooのポインタなのは実装上の理由です。
0408デフォルトの名無しさん
2008/01/23(水) 20:27:520409デフォルトの名無しさん
2008/01/23(水) 21:15:54Some operators cannot be overloaded at all (::, ., .*). For some
operators, the requirements on return types prevent them to be
overloaded to create lambda functors. These operators are ->., ->, new,
new[], delete, delete[] and ?: (the conditional operator).
0410デフォルトの名無しさん
2008/01/28(月) 11:30:59今更ながらいただきました。thx!
自力コンパイルする前にこのスレ覗いてよかった。
0411デフォルトの名無しさん
2008/01/28(月) 15:15:52どういたしまして.ただビルドしておいてるだけですが.
同僚から ICU 対応は?とか,もっとアップデートしろ
とか突き上げ食らってまして,そのうちまた新しいもの
置いておきます.
0412デフォルトの名無しさん
2008/01/29(火) 01:48:44私も今いただきました。
私もスタティックだけを使うのでありがたいです。
/MT /MTd で作成されているのですよね!?
0413デフォルトの名無しさん
2008/01/29(火) 02:21:410414デフォルトの名無しさん
2008/01/29(火) 06:56:25説明不足ですみません.
>>207 はそこに置いてある他のライブラリ(gmp とか mpfr とか)
で特に記述のないものは /MD, /MDd でコンパイルしています
ということで,boost に限って言えば bjam が /MT /MTd /MD /MDd
のすべてに関してビルドしてくれます.さらにオートリンクにより
適切なものが選ばれます.詳しくは boost/config/auto_link.hpp
を見てください.
余談ですが,自分がデフォルトを /MD /MDd にしている理由は
マネージドと混在させたい場合が時々あるからです.
/MT /MTd でコンパイルしたコードはマネージドと混在できません.
0415411
2008/01/29(火) 07:50:47http://svn.windy.cx/ から辿ってください.
あと,直リンクしやすいようにダウンロードを PHP 経由ではなくしました.
別にダウンロードされた回数とかカウントする必要ないので.
何かおかしいところがあったらここか上のWikiのコメント欄にでも.
0416デフォルトの名無しさん
2008/01/29(火) 18:37:510417デフォルトの名無しさん
2008/01/29(火) 18:52:13Windowsだと、簡単に世界で一意なGUID生成できるので、
Windowsでしかプログラミングしない自分としては、あんまりいらないな。
0418デフォルトの名無しさん
2008/01/29(火) 19:11:140419デフォルトの名無しさん
2008/01/29(火) 19:59:36って名称を使ってるんだよね.名称をどっちにするか
っていう話も出てた気がする.
あとは生成アルゴリズムがMicrosoftのそれと同じなのか
どうかとか.同じじゃないとして何か問題起きないの?とか.
0420デフォルトの名無しさん
2008/01/29(火) 20:03:090421デフォルトの名無しさん
2008/01/29(火) 20:26:28WindowsならクソみたいなMFC使ってればいいじゃん
0422デフォルトの名無しさん
2008/01/29(火) 21:04:43誰もWindows限定で話なんてしてないじゃん.
そうじゃなくて,セキュリティ上の考慮
(この場合は衝突がどれくらいの確率で起きるか)
をしたポータブルな実装が必要だって話でしょ?
なんでMFCの話なん過去のスレッドで出すかなぁ.
0423デフォルトの名無しさん
2008/01/29(火) 21:13:44と補完しました
0424デフォルトの名無しさん
2008/01/30(水) 01:41:030425デフォルトの名無しさん
2008/01/30(水) 02:26:550426デフォルトの名無しさん
2008/01/31(木) 09:33:42public:
typedef Gamma type;
typedef size_t value_type;
const static int value = 1;
const static int value2 = 1;
typedef mpl::integral_c_tag tag;
};
template <class T>
struct RetVal2{
const static int value = T::value2;
};
typedef mpl::list< Gamma, Gamma> LIST;
int main(){
cout << mpl::accumulate< LIST, mpl::int_<0>, mpl::plus<mpl::_1, mpl::int_< RetVal2<mpl::_2>::value > > >::type::value << endl;
return 0;
}
Gamma::value2の合計を出したいんですが、accumulate中にRetVal2にGamma以外のクラスが入力されているようで
value2がないぞと起こられます(多分mpl_::naというやつだと思いますが)。
value以外の数値を合計する方法を教えてください。
0427デフォルトの名無しさん
2008/01/31(木) 10:23:59使われてますね,結構いろんな場所で.
たとえば Subversion ではリポジトリの識別に
UUIDが使われています.working copy で
svn info とすれば UUID がわかります.
0428デフォルトの名無しさん
2008/02/01(金) 10:56:20class SuperFoo {};
class Foo : public SuperFoo {};
こんな感じのクラスがあって、
void DoSomething(SuperFoo *p);
みたいな関数があったとすると、
DoSomething(new Foo);
のようにできますよね。
void DoSomething2(shared_ptr<SuperFoo> p);
しかしこんな関数だと、
DoSomething(shared_ptr<Foo>(new Foo));
ってやるとエラーになるのでstatic_pointer_castしてやらんといけないのですが、
親クラスのキャストはいちいちやりたくないです。
これってこういうものなのでしょうか?
0429デフォルトの名無しさん
2008/02/01(金) 11:12:35SuperFoo* と boost::shared_ptr<Foo> は暗黙の変換のない無関係な型でしょ。
DoSomething2(shared_ptr<Foo>(new Foo)); はOK。
0430デフォルトの名無しさん
2008/02/01(金) 11:20:35最後の1行間違ってました。
DoSomething2(shared_ptr<Foo>(new Foo));でエラーになるということです…。
0431デフォルトの名無しさん
2008/02/01(金) 11:31:13using boost::shared_ptr;
class SuperFoo{};
class Foo : public SuperFoo{};
void DoSomething2(shared_ptr<SuperFoo> p){}
int _tmain(int argc, _TCHAR* argv[]){
DoSomething2(shared_ptr<Foo>(new Foo));
return 0;
}
VC++2005だがエラーなんて起こらないぞ
0432デフォルトの名無しさん
2008/02/01(金) 11:39:13すみません自分が間違ってました。
void DoSomething2(shared_ptr<SuperFoo> p);
ではなくて
void DoSomething2(shared_ptr<SuperFoo> &p);
だったのがまずかったようです。
参照をやめたら通るようになりました。
0433デフォルトの名無しさん
2008/02/01(金) 13:15:53非constな参照引数に一時オブジェクトは渡せない
0434デフォルトの名無しさん
2008/02/01(金) 13:27:43VisualCに限り可能だったりする
0435デフォルトの名無しさん
2008/02/02(土) 23:31:20関数の呼び出し式でスマートポインタを構築すべきでない
DoSomething3(shared_ptr<Foo>(new Foo), bar());
だと引数の評価順序は不定なのでnew Foo→bar()で例外送出→shared_ptr構築されず→メモリリークになる可能性がある
0436デフォルトの名無しさん
2008/02/02(土) 23:37:36引数の評価順序が不貞とか直感に反するふざけた仕様だよな
0437デフォルトの名無しさん
2008/02/03(日) 00:34:330438デフォルトの名無しさん
2008/02/03(日) 02:46:57それ使うのが一番いいと思うぜ。
0439デフォルトの名無しさん
2008/02/03(日) 03:40:580440デフォルトの名無しさん
2008/02/03(日) 10:30:15メイヤーズの受け売りじゃないですか
0441デフォルトの名無しさん
2008/02/03(日) 10:31:55それ常識じゃないですか
>>434
警告レベル上げると非標準と出せることは
サッターがGotWでも言ってますよ
0442デフォルトの名無しさん
2008/02/03(日) 11:06:590443デフォルトの名無しさん
2008/02/03(日) 14:47:360444デフォルトの名無しさん
2008/02/03(日) 14:50:24Boost もテンプレートのみの範囲なら同様。
0445デフォルトの名無しさん
2008/02/03(日) 14:52:24BoostCon Call for Sessionsとかメール流れてるけど
0446443
2008/02/03(日) 17:26:04ありがとうございます。
STL は無条件で問題ないんですね。
Boost でライブラリを使ってスタティックリンクをして .DLL は作成可能でしょうか?
0447デフォルトの名無しさん
2008/02/03(日) 18:41:080449デフォルトの名無しさん
2008/02/03(日) 19:02:18でもxpressiveみたいな代替案もあるので、普通に使っている限りは要らないと思う。
0450デフォルトの名無しさん
2008/02/03(日) 19:28:05そういう場合でもWindowsだと普通はスタティックリンク版使うだろうってこと。
その辺の制御するマクロもなんかあった気がするが。
0451443
2008/02/03(日) 19:34:03.DLL は消していますので。
それをスタティックリンクして、自作のプログラムの .DLL をつくれるのかなぁと思ったもので;;;
1本の .exe が大きくなりすぎて、機能ごとに .DLL にしないと、Debug Build のブラウザ情報の書きだしに
時間が掛かって待ちきれないので;
0452デフォルトの名無しさん
2008/02/03(日) 19:51:15なぜ試さないのか。
0453443
2008/02/03(日) 21:37:15実験するだけでも難しかしいなぁと思って;
できるって教えて頂ければ何とか、チャレンジしたいと思います。
0454デフォルトの名無しさん
2008/02/03(日) 22:37:46ここで粘着してもスルーされるだけですよ。
0455デフォルトの名無しさん
2008/02/07(木) 15:57:22と長い間思っていたのですが、 boost::ref というのは
そういうときのためにあるのでしょうか?
内部状態を持ったまま幾つものコンテナをなめまわしたいとき,
pred (←第三引数)を渡すといちいちコピーが発生するより
参照で渡したいなぁと.
0456デフォルトの名無しさん
2008/02/07(木) 16:30:280457デフォルトの名無しさん
2008/02/07(木) 17:19:530458デフォルトの名無しさん
2008/02/07(木) 17:20:020459デフォルトの名無しさん
2008/02/07(木) 17:23:08サイズによって違うよ、銀は三枚のこともあるよ
0460デフォルトの名無しさん
2008/02/07(木) 19:36:060461デフォルトの名無しさん
2008/02/07(木) 20:20:440462デフォルトの名無しさん
2008/02/07(木) 20:28:070463デフォルトの名無しさん
2008/02/07(木) 20:29:49あとspiritも
0464デフォルトの名無しさん
2008/02/07(木) 20:37:270465デフォルトの名無しさん
2008/02/07(木) 21:41:42regex「ねーよ」
0466デフォルトの名無しさん
2008/02/07(木) 23:00:030467デフォルトの名無しさん
2008/02/08(金) 04:16:430468デフォルトの名無しさん
2008/02/08(金) 13:30:59そろそろC++も終わりと考えていいのかな?
0469デフォルトの名無しさん
2008/02/08(金) 14:42:020470デフォルトの名無しさん
2008/02/08(金) 15:00:31枯れないとC++標準として採用できないではないか。
0471デフォルトの名無しさん
2008/02/08(金) 21:55:570472デフォルトの名無しさん
2008/02/09(土) 14:39:41それでも更新が少ないって事はboostの開発者達は皆C++捨てて他の言語にいっちゃったって事じゃないのかなーとか思ったり
0473デフォルトの名無しさん
2008/02/09(土) 15:28:19の割にはレビューはそれなりに継続して行われてる気がするんだが。
0474デフォルトの名無しさん
2008/02/09(土) 16:34:47更新少ないのかな?
svn見る限りでは2月に入ってリビジョンは64上がってるんだが
0475デフォルトの名無しさん
2008/02/09(土) 16:42:45もしかしてCVSの方を見てるとか?
boostの開発はsubversionに移行しててCVSの方は更新止まってるからね。
0476デフォルトの名無しさん
2008/02/09(土) 20:04:20boosterの変態的嗜好を満足させる言語がほかにあるとは考えにくいがどうだろう。
0477デフォルトの名無しさん
2008/02/10(日) 00:22:550478デフォルトの名無しさん
2008/02/10(日) 01:44:11boots の間違いでした,って言え
0479デフォルトの名無しさん
2008/02/10(日) 08:48:090480デフォルトの名無しさん
2008/02/10(日) 12:00:50Debug版が作られないのですが、こういうものなのでしょうか?
コマンドラインはこうしています。
bjam -sTOOLS=msvc "-sBUILD=<runtime-build>release debug <runtime-link>dynamic <threading>multi" stage
0481デフォルトの名無しさん
2008/02/10(日) 12:04:10Linux で以下のように release かつ dynamic のライブラリをビルドしようとすると
debug と static の組み合わせもビルドして大量のライブラリができるけど,どこが
間違っているでしょうか? Boost は 1.34.0 です。
./bjam --toolset=gcc --prefix=/usr/local -sBUILD="release <runtime-link>dynamic" --with-regex install
436 名前:デフォルトの名無しさん 投稿日:2007/07/17(火) 01:26:03
>>435
Boost.BuildがV2になったんで-sBUILD消滅
<hoge>hageをhoge=hageにしてオプションとして渡せばおk
■ このスレッドは過去ログ倉庫に格納されています