トップページ⇒tech
950コメント288KB

【C++】Boost使い集まれ!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++の準標準ライブラリ"Boost"の専用スレです。
Download/Documentはこちらからどうぞ:
http://www.boost.org/

関連スレ
C++相談室 part11
http://pc3.2ch.net/test/read.cgi/tech/1032345774/

STLスレッド part2
http://pc3.2ch.net/test/read.cgi/tech/1026793823/
0652VC6 + STLPortNGNG
パスは通ってます。include と lib
0653デフォルトの名無しさんNGNG
>>651
bad_cast は <typeinfo>
0654デフォルトの名無しさんNGNG
>>647
問題の原因を拡散させないのが大事なんじゃないかと。
だれもMSに責任を取ってもらおうなどとは考えてないよね。
まあ次のVC++でメジャーなテンプレートライブラリに
かなり対応する予定だとか。たのしみですけど。
0655VC6 + STLPortNGNG
http://www.kmonos.net/alang/boost/

ちなみにこのサイトのソースを試してみてるだけですので・・・

>>653 thx
0656デフォルトの名無しさんNGNG
>>649
ライブラリ・リンクさせるの忘れてた。
0657デフォルトの名無しさんNGNG
Boost-jpプロジェクト第一弾が発表されました。
1.29と1.30に分かれており、どちらもまだβ版で、まだ未訳のドキュメント
もかなり含みますが、興味のある方はぜひ一度目を通してください。
ttp://sourceforge.jp/frs/index.php?group_id=428&release_id=2954

もし気が付かれた事がありましたら、ぜひ
ttp://sourceforge.jp/projects/boostjp/lists/
Boost-jpメーリングリストにご意見ご批判を流して下さい。
0658デフォルトの名無しさんNGNG
>もし気が付かれた事がありましたら、ぜひ
>ttp://sourceforge.jp/projects/boostjp/lists/
>Boost-jpメーリングリストにご意見ご批判を流して下さい。

このメーリングリストは翻訳者専用だそうですので、別にご意見ご批判
投稿用の場所を設けます。
0659デフォルトの名無しさんNGNG
cppll@したらばがあります。
http://jbbs.shitaraba.com/computer/5651/
この中当たりはどうでしょうか?
0660デフォルトの名無しさんNGNG
boostのコンパイルを速くするにはどうしたらいいですか?
VC++ならpchが効くんでとっても快適なコンパイルができるんですが、
gccだとふざけたほど時間がかかって困ってます。
ccacheもあんまり効果無いし。
0661デフォルトの名無しさんNGNG
>>660
・速いマシンを買う。
・cvsからcurrent(3.4)を取ってきてpchのテスターになる。
(gcc/gcc/c-pch.c,cpppch.cあたりか?頑張って!)
0662デフォルトの名無しさんNGNG
あ、こんなところに宣伝が。
フィードバックほしいです、はい。
ソースフォルゲのバグトラッキング(要メールアドレス)か、
cppll-bbs@したらば(まあ匿名)でお願いします。
別に、原文と照らし合わせてくれ〜、とまでは言わん。
変な日本語とか、意味がわからないところとか、指摘していただけたら幸い。
むしろ、原文でも意味がわからんところもあったりするががが。
0663デフォルトの名無しさんNGNG
そういえば、boost::poolが使えるかどうか実験してみたんだけど
10000回くらいmalloc,free 繰り返したらがはっきりと差が出てくるね。
お手軽に使いたい場合ちょこっと便利かも。

ただそんなに大量に細かいオブジェクトを生成破棄する機会がいまのところないんだけどね、俺の場合。
0664デフォルトの名無しさんNGNG
>>663
何と何を比べてどう差が出るのでつか?
0665デフォルトの名無しさんNGNG
boost::poolってstd::list等のコンテナのメモリアロケータにも使えるのですか?
1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、
速くなりますかね?
0666デフォルトの名無しさんNGNG
>>665
ベンチマーク取ってみればいいじゃん。
0667デフォルトの名無しさんNGNG
>>666
使えるかどうかとどのように使うのかを聞いてるんですが…
0668デフォルトの名無しさんNGNG
>>664
普通のmallocとかnewとかを生成、破棄するのに比べて速い。

>>665
日本語ドキュメントにはstd::vectorとかコンテナでも使えるみないなことかいてあったよ。
ただ、普通に使うのとちがってプログラム終了するまえにsingletonオブジェクトから
明示的に開放しないといけないっぽいらしいけど。
読んでみたら?
0669デフォルトの名無しさんNGNG
>1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、
既に設計がおかしい様な・・・
0670デフォルトの名無しさんNGNG
>>665
どんなゲーム内容だよ、それ
シューティングか?
0671デフォルトの名無しさんNGNG
こんなのとか?
ttp://homepage3.nifty.com/arika_download_02/mpeg/ddd002_1.mpg
・・・つーても、

> 1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、

これが必要とは思えないが・・・。
0672デフォルトの名無しさんNGNG
boost::poolとstd::mallocでdouble型のインスタンスを500000回生成して
速度を比較してみたよ。

malloc = 2231874
boost::pool = 1371511

short型でもやってみた。

malloc = 2181766
boost::pool = 1132248

コンスタントに2倍程度の速度が出ている。
0673デフォルトの名無しさんNGNG
>>671
(((( ;゚Д゚))) ガクガクブルブル
0674デフォルトの名無しさんNGNG
>>671
こんなのできるやついるんだな_| ̄|○
ライフ制をなの発見して、ちょっと安心( ´∀`)

将来、戦闘機が遠隔操作とかになったら、エリートになれそうだな。
まぁ、今はただのオタだが…。

>>672
GJ!!
0675デフォルトの名無しさんNGNG
>>672
・・・この結果ならそんなにつかう必要性を感じないなぁ
0676デフォルトの名無しさんNGNG
つーかそんなベンチやっても差はあんまり開かんだろ。
実際の運用を想定してmallocの方をある程度断片化させないと。
0677デフォルトの名無しさんNGNG
>>675
boost::poolのコンストラクタにいちいちサイズを指定しなければ
いけないのが面倒。

boost::pool<> pl(sizeof(double));

こんな感じ。
サイズを固定化して速度をあげているような気がする。もちろん
テンプレートパラメータに型を指定すればサイズの指定は必要
ないが、doubleやintのような基本型を指定するとエラーになる
のが問題だ。
0678デフォルトの名無しさんNGNG
>>677
用途判ってないだろ
0679デフォルトの名無しさんNGNG
>>672
環境は?
mallocの実装がしょぼい環境でこそ、威力を発揮するだろうからな。
最近のOSなら、boost::pool相当のことはOS内部で既にやってある可能性もある。
0680デフォルトの名無しさんNGNG
>最近のOSなら、boost::pool相当のことはOS内部で既にやってある可能性もある。
更に言うと、malloc内部でも同じ事をやっている可能性があって
boost::poolを使うと3重に無駄なことをしていると言うことにもなりかねない
0681676NGNG
つーかね、バウンダリに収まるオブジェクトでテストしても効果無い。
断片化させた上で、16byte以上のオブジェクトで試せ。
0682デフォルトの名無しさんNGNG
>>677>>679-680
F1見ながら釣りですか?
0683デフォルトの名無しさんNGNG
>1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、

どんなん作ってんねん。1/60秒ってことはゲームなのだろうが、
たとえ弾幕シューでもそんな激しい頻度にはならないっしょ。
0684デフォルトの名無しさんNGNG
「1/60秒」って言葉を使いたかっただけかと(藁
0685デフォルトの名無しさんNGNG
ピクセル毎にオブジェクトで管理
0686デフォルトの名無しさんNGNG
パーティクルアニメーションとか
0687デフォルトの名無しさんNGNG
パーティクルならありそうだ

でも、作り方を見直したらboost::poolに変えるよりも数倍は早くなりそう
0688デフォルトの名無しさんNGNG
VC7+STLport(iostreamビルド済み)で使ってるんですが
今度Boost::regexを利用しようと思うんですが、
makefileはvc6-stlport.makとvc7.makと有るんですが
STLport使いつつBoost使いたいのですが
どのメイクファイルでコンパイルすればいいのでしょうか?
0689デフォルトの名無しさんNGNG
>>688
「ですが」 多すぎ
0690デフォルトの名無しさんNGNG
>>688
まるちー
0691デフォルトの名無しさんNGNG
VC7+STLport(iostreamビルド済み)で使ってるんまるちー
今度Boost::regexを利用しようと思うんまるちー、
makefileはvc6-stlport.makとvc7.makと有るんまるちー
STLport使いつつBoost使いたいのまるちー
どのメイクファイルでコンパイルすればいいのでしょうかまるちー?
0692デフォルトの名無しさんNGNG
エロゲーヲタはカエレ!
0693デフォルトの名無しさんNGNG
おまいら面白いな
0694デフォルトの名無しさんNGNG
>>691
にょ
0695デフォルトの名無しさんNGNG
VC7+STLport(iostreamビルド済み)で使ってるんだにょ
今度Boost::regexを利用しようと思うんだにょ、
makefileはvc6-stlport.makとvc7.makと有るんだにょ
STLport使いつつBoost使いたいにょ
どのメイクファイルでコンパイルすればいいのでしょうかにょお?

----
g++ 3.2.2 使ってるんだけど、STLport 入れた方がイイ?
0696デフォルトの名無しさんNGNG
vc6 に stlport いれたら loki のSmartPtrコンパイルできんかった。
0697デフォルトの名無しさんNGNG
         __ , ────── 、__
      , - ':::::::::::::::::::::::::::::::::::::::::::::::::::\
     / ;;;;;;;:::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;\
    /,,;,,,,,  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ,,,,,,,,;::::::丶
   / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::::::ヽ
   i゙:::;:::::||::::::,!i:::::::::::,|i::::::::::::::::::;:::::::::::::::::::::::::::::::゙i
  i゙::::|;;;;| |;;;;;| |::::::::::| |:::::::::::::::::||::::::::::::::::::::::::::::::::|
 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;;;::::::::::::::::::::|
  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,,、    |:::::::::::::::::::|
  |;::::::::|,-──、    ~,.--`‐、    |:::::::::::::::::::|
  `ヽ、i     )__r'´    )__|;::::::::::::::/  
  .  ヽ、__、/<    ヽ、__、-    /^゙-、;;;;/     >>691おもろないよ
     {     ' '          '-'~ノ
    λ   ____        /-'^"
     ヽ,_  `ー─''´       (
     /`''丶、     , -    /^l
    /  /( ノ `'''''''´~ _, - ' ~ ゙i、
    { / /| ̄ ̄ ̄ ̄   _,-'^¨ }
    {/ /  ゙ー────'~   \|
    /               ヽ  \
0698デフォルトの名無しさんNGNG
>>697
それだけを言うために、AAなんかはってんじゃねーよ、糞ボケがーー。
0699デフォルトの名無しさんNGNG
>>698 ( ´,_ゝ`)プッ
0700デフォルトの名無しさんNGNG
火垂るの墓の節子?
0701デフォルトの名無しさんNGNG
C++とjavaではドッチが偉いの?
0702デフォルトの名無しさんNGNG
>>701
C++
0703デフォルトの名無しさんNGNG
つーかそんなネタに反応するなよ>702
0704702NGNG
>>703
ごめん、他人の糞ネタを一番つまらない方法でさっさと消費するのが
最近のマイブームなんだ。
0705デフォルトの名無しさんNGNG
言い訳レスもいらん。702はゴミ。
0706702NGNG
という放置できない厨のせいで駄レスがさらに増えるのであった(w
0707デフォルトの名無しさんNGNG
と鏡を見ながら発言する>>702
0708デフォルトの名無しさんNGNG
なんなの・・・この駄レス・・・
0709702NGNG
>>708
困ったもんだよねw
0710デフォルトの名無しさんNGNG
もうどうでもいいからやめろ。 しつこすぎる。
0711702NGNG
>>710
いやー、そういうこと書いちゃ終わるもんも終わらないでしょーw
0712702NGNG
まったく馬鹿ばかりだ。 俺は悪くないぞ。
0713702NGNG
俺も全然悪くないぞ。
0714702NGNG
だれか、俺にかまってくれよ〜
0715デフォルトの名無しさんNGNG
C#
0716デフォルトの名無しさんNGNG
ttp://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BOOST_WIKI

こんなのあるんだねぇ。ガイシュツだったらスマソ
0717デフォルトの名無しさんNGNG
>>716
既出もなにも、boost.org のトップページからリンク張ってあるしなぁ。
0718vnsNGNG
boostを初めてインストールして適当なものを書いてみようとしたのですが
#include "stdafx.h"
#include<string.h>
#include<vector>
#include<algorithm>
#include<mbstring.h>
using namespace std;
#include <boost/regex.hpp>
の状態でstrlen,strcatなどを呼ぶと
error C2668: 'strlen' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
がでてしまいます。
回避方法ご存じの方教えてください。VC++6sp5です。
0719デフォルトの名無しさんNGNG
#include<string.h>
   ↓
#include<string>
0720ヽ(´ー`)ノNGNG
strlen, strcat を使うのなら cstring じゃないのかと小一時間。
ていうか boost 関係ないやん…(;´Д`)
0721デフォルトの名無しさんNGNG
ところで、boost::regexのライブラリ名で'i'ついているやつありますよね?
例:boost_regex_vc6-stlport_mdi.dll
                   ↑これ

このiってdynamicとdebugの'd'がならんでついてると気持ち悪いから
dyの発音からdとってiなんですかね?

それとも別な意味あるんですかね?
0722山崎渉NGNG
(^^)
0723山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0724デフォルトの名無しさんNGNG
保
 守
0725デフォルトの名無しさんNGNG
>>721
iはcase-insensitiveのi。
0726デフォルトの名無しさんNGNG
>>725
信じていいですか?じゃー、ここがsの時はsensitiveかな?
0727デフォルトの名無しさんNGNG
AGE
0728デフォルトの名無しさんNGNG
boost::weak_ptr の仕様が1.3.0から変わってうかつにコンテナにいれたら泣くとか、
boost::filesystem をはじめとしてダブルバイト文字対応が弱くて泣くとか、
泣き言っても良いですか age

0729デフォルトの名無しさんNGNG
>boost::weak_ptr の仕様が1.3.0から変わってうかつにコンテナにいれたら泣く、
まじっすか?どうなるんですか?
つーかいまのところ、コンテナにweak_ptrいれてないから安心だ。
0730デフォルトの名無しさんNGNG
boost::thread_groupの実装にstd::listが使ってあって、
挿入・削除のときにstd::find(begin(),end(),...)してあるんだけど、
std::setを使わないのはなんでだろう?
0731 ◆hMJAPH9PWA NGNG
BCC5.5だとboost/integer.hppのboost::uint_value_t<Max>がMaxに関係なくunsigned longになってしまう…。
g++だと思ったとおりになるから、バグかな。

using boost::uint_value_t;
std::cout << sizeof(uint_value_t<1>::fast) << std::endl;
std::cout << sizeof(uint_value_t<300>::fast) << std::endl;
std::cout << sizeof(uint_value_t<30000>::fast) << std::endl;
std::cout << sizeof(uint_value_t<60000>::fast) << std::endl;
//std::cout << sizeof(uint_value_t<100000>::fast) << std::endl; // BCCだとコンパイルすら通らない
0732デフォルトの名無しさんNGNG
>>729
1.30.0 の weak_ptr には比較演算子が operator< しかないから、
weak_ptr のコンテナに対して、std::find や std::remove などの
汎用アルゴリズムを専用ファンクタなしに呼び出すとコンパイルエラー

つーか、weak_ptr は operator->() も operator*() も無いんだから、
weak_ptr という名前はやめたほうが良いんじゃないかとも思う。
0733729NGNG
>>732
ありがとん。

まぁ確かにlockしたり、shared_ptrにわたしたりすんのめんどくさいかも。
0734デフォルトの名無しさんNGNG
結局、boostは商用のクローズドなプログラムに利用可能なんでしょうか?
過去ログ見たんですが、結論出ていないっぽいですよね…
可能ならバイト先のコードに使いたいんですが、皆さん商用プロダクトで使った
りしてますか?実際のところどうなのでしょう?
0735デフォルトの名無しさんNGNG
漏れも使ってるんで大丈夫です。バイトだけど。
0736デフォルトの名無しさんNGNG
>>735
おまえがルールブックか!
0737通りすがりのランボーNGNG
このスレでは俺が法律だ。
0738デフォルトの名無しさんNGNG
>>734
バイト先のプロジェクトの責任者に聞くべきじゃネーの?
それで何で利用不可能なの?
0739デフォルトの名無しさんNGNG
ttp://www.tietew.jp/cppll/archive/5776
ttp://www.tietew.jp/cppll/archive/5777
0740デフォルトの名無しさんNGNG
boostのライセンス的には要するに問題なしってことだな
後はプロジェクトマネージャーが使用許可くれるかどうかぐらいか
その辺の裁量も自分にあるならとっとと使えばいいし
0741デフォルトの名無しさんNGNG
>740
改変型バークレーライセンスとか言うやつだっけ?
0742734NGNG
皆さんどーもです。特に>>739サマ。
いやぁ、バイト先が小さい会社なんで、プロジェクトマネージャーとかそんな
のいなくって、むしろ実質僕がそのソフトの責任者みたいになってるんですが、
下手に外部ライブラリ使うと商用だとヤヴァイかなぁと思いまして。
一応自分でも調べてたんですが、自信が無かったものでして。

リファレンスカウントとかfilesystemみたいなのとか自前で一応作ってたんで
すけど、なんかちょっと自作のが怪しくなって来たんでこの際boostにしちま
おうかと思った次第でして。さすがにRegexなんか作れないですし。

とにかく皆様ありがとうございましたm(_ _)m。これで大部楽になります。

0743デフォルトの名無しさんNGNG
boostのライセンス条項に同意できるなら、決定権のある君がOKならOKでは。

マルチバイトの処理に怪しいとこもあるので、独自ライブラリのままのほうが
いい場合もある。よく検証してから使おうね。
Unicodeとかでいけるなら、boostでいいけど。
0744デフォルトの名無しさんNGNG
vc6sp5 stlport4.5.3でbjam使って、filesystemをビルドすると
どうがんばってもofstream使用するとエラーでる・・・。

error LNK2001: 外部シンボル
""public: class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> >
__thiscall boost::filesystem::path::native_file_string(void)const " (?native_file_string@path@filesystem@boost@
@QBE?AV?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@XZ)" は未解決です
0745デフォルトの名無しさんNGNG
stlport使わんかったらうまくいった・・・。
なんでだー。
ていうか俺にどうしろちと・・・。
stlport使いたいんだよ・・・。
0746デフォルトの名無しさんNGNG
>>744
ENVにSTLPORTかなんか追加して、includeディレクトリ設定してやった?
let's boostあたりに書かれてるんじゃないのかな
0747744NGNG
今手元に設定ないんであれだが、だいたいこんな感じっす
[vcvars32.bat]
〜略〜
set INCLUDE=C:\hoge\STLport-4.5.3\stlport;
%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%

set LIB=C:\hoge\STLport-4.5.3\lib;
%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%

set STLPORT_PATH=C:\hoge\STLport-4.5.3
set STLPORT_VERSION=4.5.3

[コマンドプロンプト]
bjam "-sTOOLS=msvc-stlport" "-sBUILD=debug release <runtime-link>static/dynamic <stlport-iostream>on/off
<threadの設定?>multi.single <デバッグシンボル?>on/off"

だれかえらい人、サンプルの設定教えてくださいーーーー。
あと、βのstlportって使えない?
0748デフォルトの名無しさんNGNG
>>744
>>631-
0749デフォルトの名無しさんNGNG
>>748
それ読んでもbjamじゃうまくできねーんだよぅ。馬鹿なおいらをたすけてくれぃ。
0750デフォルトの名無しさんNGNG
>>749
ほぅ、
> set STLPORT_PATH=C:\hoge\STLport-4.5.3
これを、
> set STLPORT_PATH=C:\hoge
こう直してもダメだったわけだな。
0751デフォルトの名無しさんNGNG
>>750
だめですた。
■ このスレッドは過去ログ倉庫に格納されています