Boost総合スレ part6
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2008/04/09(水) 23:04:01part 5 http://pc11.2ch.net/test/read.cgi/tech/1192662575/
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/
0002デフォルトの名無しさん
2008/04/09(水) 23:05:30Boost C++ Libraryプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4798007862/
Beyond The C++ Standard Library
http://www.amazon.co.jp/exec/obidos/ASIN/0321133544/
C++ Template Metaprogramming
http://www.amazon.co.jp/exec/obidos/ASIN/0321227255/
The Boost Graph Library
http://www.amazon.co.jp/exec/obidos/ASIN/0201729148/
■関連スレ■
C++相談室 part61
http://pc11.2ch.net/test/read.cgi/tech/1205059063/
C++0x 3
http://pc11.2ch.net/test/read.cgi/tech/1204808027/
【C++】STL(Standard Template Library)相談室 9
http://pc11.2ch.net/test/read.cgi/tech/1204045410/
0003デフォルトの名無しさん
2008/04/09(水) 23:06:26http://sourceforge.net/projects/loki-lib/
JTC1/SC22/WG21 - The C++ Standards Committee
http://www.open-std.org/jtc1/sc22/wg21/
POCO, the C++ Portable Components
http://www.appinf.com/poco/info/
http://sourceforge.net/projects/poco/
The unofficial BCB Boost patches
http://bcbboost.sourceforge.net/
0004デフォルトの名無しさん
2008/04/09(水) 23:08:42boobsを語れゴルァ boost::array<part, 6>
http://pc11.2ch.net/test/read.cgi/tech/1207744477/
boobsが気に入らなかったのか
0005デフォルトの名無しさん
2008/04/09(水) 23:10:44スレタイ違いは正直致命的だと思うので
立て直しは仕方が無い気がする。
0006デフォルトの名無しさん
2008/04/09(水) 23:16:43確かにおっぱいは好きだが、タイポは嫌いだしいいんじゃね。
0007デフォルトの名無しさん
2008/04/10(木) 13:30:28bjam --toolset=msvc-9.0 release debug link=static,shared runtime-link=static,shared -sHAVE_ICU=1 -sICU_PATH="C:\Program Files\icu" --prefix="C:\Program Files\boost" install
ってしたけどダメだった.
runtime-link=static,shared
の部分をなくせばコンパイルが始まるんだけど,このオプション指定は外しても問題なし?
0008デフォルトの名無しさん
2008/04/11(金) 19:23:02こんな風に複数指定できるの?
おれはいつもこんな風に指定しているんだけど。
runtime-link=static runtime-link=shared
0009デフォルトの名無しさん
2008/04/12(土) 16:06:460010デフォルトの名無しさん
2008/04/12(土) 16:12:11まったく別物。
linkは、スタティックリンク(lib)とダイナミックリンク(dll)をビルドするかどうか。
runtime-linkは、CRTのランタイムライブラリをスタティックリンクするか、ダイナミックリンクするかどうか。
例えばVCの場合、runtime-linkをsharedにした場合は、dllも一緒に配布しなければならない。
0011デフォルトの名無しさん
2008/04/12(土) 16:33:46知らなかった
0012デフォルトの名無しさん
2008/04/15(火) 00:34:17Systemを使っていた/(^o^)\
0013デフォルトの名無しさん
2008/04/15(火) 05:37:311.35.0のdarwin.jam読んでユニバーサルバイナリをサクッとビルドする方法がやっとわかった
bjam --toolset=darwin architecture=combined address-model=32,64 link=static,shared release debug stage
toolset=darwin中?の更にオプションになってるのを、別オプションで--付くと勘違いしてたo..rz
ただこれでもfilesystemのdylibはエラー出るけどstaticは問題無さそう、たぶん。
0014デフォルトの名無しさん
2008/04/15(火) 09:00:21asio良いよな
0015デフォルトの名無しさん
2008/04/18(金) 02:14:33ソースをみたのですが、、、よくわかりませんでした。どなたかワーニングが出る理由を教えてください。
class BMP {
public:
BMP(unsigned int seed=0) :
gen(static_cast<boost::mt19937::result_type>(seed)),
dst(0.0, 1.0),
rv(gen, dst) {}
double operator()() {
return rv();
}
private:
boost::mt19937 gen;
boost::normal_distribution<double> dst;
boost::variate_generator<boost::mt19937, boost::normal_distribution<double> > rv;
};
ワーニングの内容
sample.cpp:51: warning: 'bmp$rv$_dist$_r1' may be used uninitialized in this function
sample.cpp:51: warning: 'bmp$rv$_dist$_cached_rho' may be used uninitialized in this function
ちなみに51行目は、
BMP bmp;
となっていて、これをg++で-O3 -Wallでコンパイルするとワーニングが出ます。でも、-O3をとると出ません。
どうかよろしくお願いします。
0016デフォルトの名無しさん
2008/04/18(金) 09:17:47警告の内容を読めば判るとおり、初期化前に値を参照している怖れがある。
問題ないプログラムを書いているなら無視してOK。
0017デフォルトの名無しさん
2008/04/18(金) 22:39:28ありがとう。問題ないプログラムだと思うので、とりあえずこのままでやっときます。
0018デフォルトの名無しさん
2008/04/21(月) 19:10:240019デフォルトの名無しさん
2008/04/21(月) 19:11:130020デフォルトの名無しさん
2008/04/21(月) 21:12:45目玉機能とかあるのかな?
0021デフォルトの名無しさん
2008/04/22(火) 12:30:390022デフォルトの名無しさん
2008/04/29(火) 02:05:02LNK1104: コンパイラは、ファイル 'libboost_filesystem-vc71-sgd-1_35.lib' を開くことができません。
と出た.誰か助けて
インクルード方法は
#include "boost/filesystem/fstream.hpp"
で,VC++のオプションでインクルードファイルに
c:\..\boost
と設定しています
0023デフォルトの名無しさん
2008/04/29(火) 02:28:290024デフォルトの名無しさん
2008/04/29(火) 16:37:410025デフォルトの名無しさん
2008/04/29(火) 16:51:120026デフォルトの名無しさん
2008/04/29(火) 17:10:240027デフォルトの名無しさん
2008/04/29(火) 17:11:54>>22
構成プロパティ>リンカ>全般>追加のライブラリディレクトリ
に(boostのディレクトリ)\libsを追加
そうすればVC++ではboostがオートリンクしてくれる
それはともかくスタティックリンクの仕方も分からず
ヘッダのインクルードと混同しているのにboostを使うのは無謀と思うんだが……
まあ並行して学んだ人もいるかもしれないけど
あと「boostをビルド」じゃなくて「boostを使ったプロジェクトをビルド」だろう。多分
0028デフォルトの名無しさん
2008/04/29(火) 18:31:31boostビルドしなきゃライブラリができないじゃないか
002927
2008/04/29(火) 18:54:50初心者がbjamなしでわざわざビルドするのはもっと無謀だろ……
003022
2008/05/01(木) 08:36:22bjam は boost-jam-3.1.16-1-ntx86.zip のものを boost1.35 を VC++7.1 を使用してboostをビルド
したつもりだったんですがやはりVCで「boostを使ったプロジェクト」のビルドが出来ません.
「ツール」→「オプション」→「プロジェクト」→「VC++ディレクトリ」で
インクルードディレクトリに C:\...\boost\bin.v2
ライブラリファイルディレクトリに C:\...\boost\stage\lib としています.
何がいけないのか自分だけではよくわかりません.どうかご教示いただけないでしょうか?
0031デフォルトの名無しさん
2008/05/01(木) 09:12:28まずはそのlibファイルがあるか確認しよう。
0032デフォルトの名無しさん
2008/05/01(木) 12:04:44足りないライブラリがあるからねぇ。
1.34.1からオプションが変わってたので、
自分も何度かビルドし直しました。
0033デフォルトの名無しさん
2008/05/01(木) 19:40:22ttp://www.boost-consulting.com/products/free
まずは1.34.1インストーラを使ってみたらいいんじゃないかな?
0034デフォルトの名無しさん
2008/05/02(金) 05:34:02>>7と>>8を夜魅魔症
003522
2008/05/03(土) 00:37:26確認したところ,-sgd- 付きの lib ファイルはありませんでした.
情けないことに指摘されるまでずっとあると思っていました.
>>34
シングルスレッド向けlibファイルを作るオプションコマンドを色々な形で実行してみても
fail update と出て -sgd- ファイルが作られることはありませんでした.
他にもboostの全てをビルドするしたという方と同じコマンドを実行してもやはりfail updateと出て生成されることはありませんでした.
>>33
var1.34.1インストーラを使い,var1.35 とは別に filesystem を生成し,プロジェクトもそれに合わせて設定しなおしたところプロジェクトのビルドはすんなりと通りました.
初めて boost を使うのでもう最新版であることにこだわらず var1.34.1 を使うことにしました.
解決せずに終わることにすっきりしないでもないですが,余裕もないのでこれで質問を終わります.
レスしてくれた方々,ありがとうございました.解決せずに〆ることになり申し訳ございません.
0036デフォルトの名無しさん
2008/05/03(土) 13:15:00boost.graph
を活用している人いますか?
ちょっとしたデータなら自分で自前グラフデータ作ったほうがいいのか
その辺のしきいってどのあたりなんだろ
0037デフォルトの名無しさん
2008/05/03(土) 19:00:59Let's Boostの指示通りで成功した俺が来ましたよ.
Visual Studio 2005 ProのVC++への導入ができました.
boost_1_35_0.zipとboost-jam-3.1.16-1-ntx86.zipを入手し,
"%VS80COMNTOOLS%vsvars.bat" を実行し,
D:\Develop\boost_1_35_0\bjam.exe --toolset=msvc link=static,shared release debug stage
を実行しました.VSのパス設定は
インクルードファイル:D:\Develop\boost_1_35_0
ライブラリファイル:D:\Develop\boost_1_35_0\stage\lib
とし,C++ クックブック レシピ9.12のビルド・実行が成功しました.
補足要求とか,誤解指摘などあればどうぞ.
0038デフォルトの名無しさん
2008/05/03(土) 19:14:30インストールなんて難しくないだろ。
SVNからHEAD引っ張ってきてbjamでビルドするだけだろ。
0039デフォルトの名無しさん
2008/05/03(土) 19:22:320040デフォルトの名無しさん
2008/05/03(土) 19:35:08Win32環境だと使ってるコンパイラによって困ったりするのと
一番こまっちゃうのはVSのバージョン複数同時インストールしてるとワケワカメになる事だと思う。
unix系とりあえず自分の使ってるシステムでは問題でなかった。
0041デフォルトの名無しさん
2008/05/03(土) 19:48:15俺はstageディレクトリを作っているが、要するにVSのバージョンに合わせて、
stageディレクトリを複数用意すればいいだけの話だろ。
VSがひとつだけだとしても、32bitコードと64bitコードがあるが。
0042デフォルトの名無しさん
2008/05/03(土) 21:32:300043デフォルトの名無しさん
2008/05/03(土) 23:09:240044デフォルトの名無しさん
2008/05/03(土) 23:32:34さらにtraits→concept。
どちらも下方互換性が失われるわけじゃないから、
boostに留まるならすぐに直す必要はないけど、
標準入りするには必須かと。
0045デフォルトの名無しさん
2008/05/04(日) 00:18:24何とかビルドするのに1週間も掛かってしまったぜ
0046デフォルトの名無しさん
2008/05/04(日) 04:59:130047デフォルトの名無しさん
2008/05/05(月) 11:03:59./configure
make
checkinstall (以前のバージョンだとここでこけた)
できるな。
0048デフォルトの名無しさん
2008/05/10(土) 13:45:05Boost Graph はグラフデータを表す方がメインじゃなくて、汎用的に使えるグラフ上のアルゴリズムの方がメインだと思う。
自前でグラフデータ作るなら Boost Graph に渡せるようにしとくと便利、みたいな。
ちょっとしたデータの方こそ adjacency_list とか使ってさくっと済ませて、速度なり機能なり必要な要件があるなら
それに適したデータを作るなり、アダプタ書くなりする方がいいんじゃないかと思う。
0049デフォルトの名無しさん
2008/05/11(日) 17:51:55なんだよ Header++ って。ヘッダ仕様自体は変わってないつーのwwww
0050デフォルトの名無しさん
2008/05/11(日) 17:52:510051デフォルトの名無しさん
2008/05/11(日) 17:52:59と思ったことが一回ぐらいない?
0052デフォルトの名無しさん
2008/05/11(日) 18:58:050053デフォルトの名無しさん
2008/05/11(日) 19:12:19でもこの分野、既存の用語の「反対の意味」とか「○○バージョン」を意味したいだけの造語、
結構多いでしょ。
ソフトウェアだって、単にハードウェアとの対比で生まれただけで、別に
ソフトウェアの何かがsoftだからそう呼ばれるようになったわけじゃないし。
0054デフォルトの名無しさん
2008/05/11(日) 23:41:02どうせ49は別の難癖付けてBoostを使わないと思う。
はっきりとBoost使ったコードはきもいから嫌だとか
正々堂々と言うほうがかえってすっきりした気分になれる、たぶんお互いに。
0055デフォルトの名無しさん
2008/05/12(月) 00:00:570056デフォルトの名無しさん
2008/05/12(月) 00:17:000057デフォルトの名無しさん
2008/05/12(月) 03:46:350058デフォルトの名無しさん
2008/05/12(月) 04:34:00ただ>>49が誰かに構ってほしかっただけです。
気にしないで下さい。
0059デフォルトの名無しさん
2008/05/12(月) 13:47:230060デフォルトの名無しさん
2008/05/12(月) 14:00:360061デフォルトの名無しさん
2008/05/12(月) 14:06:30xx が ++ を英字で模倣したものだと気付くのに時間かかった。
Makefile とかは大文字で普通に使ってるから余計わかりにくい。
0062デフォルトの名無しさん
2008/05/12(月) 17:23:27Cからも使えるヘッダなら .h でいいけど
0063デフォルトの名無しさん
2008/05/12(月) 17:32:07opentissue
が便利
0064デフォルトの名無しさん
2008/05/13(火) 06:25:23そんな人がCとC++を使ったら「CっぽいC++」と「C++」を書くんだろうな
0065デフォルトの名無しさん
2008/05/13(火) 06:56:220066デフォルトの名無しさん
2008/05/13(火) 08:13:29boostのfaqに書いてある理由も理解できるので、別に .hpp に嫌悪感を抱くこともない
拡張子ネタとは関係ないけど、いくらビャーンの本で推奨されてもさすがにプログラミング環境でプロポーショナルフォントを使うのはナイ
0067デフォルトの名無しさん
2008/05/13(火) 08:19:58普通にプロポーショナルフォントを使っているが。
0068デフォルトの名無しさん
2008/05/13(火) 10:51:26Boost1.3.4.1を使用しているのですが、formatのparseメソッド(※)は使わない方がいいのでしょうか?
※宣言部分のコメントには「resets buffers and parse a new format string」とあり、コンストラクタでコールされています。
動作ですが、
boost::format fmt( "abcd %1$s" );
fmt % 1;
std::cout << fmt << std::endl;
fmt.parse( "efgh %1$s" );
fmt % 2;
std::cout << fmt << std::endl;
とすると出力が
abcd 1
2
となってしまいます。
0069デフォルトの名無しさん
2008/05/13(火) 10:52:22一応、
�@.\boost\format\parsing.hpp の400行目(parseメソッドの最初)に
clear();
を追加。
�A.\boost\format\format_implementation.hpp の行目(clearメソッドの最初)に
prefix_.resize(0);
を追加。
とすることで
abcd 1
efgh 2
と出力されるようになるのですが、この修正だけで問題ないのか心配です。
(ちなみに1.3.5.0のソースもDLして確認してみましたが、該当するような処理はありませんでした。)
まぁそもそもformatオブジェクトを使いまわしたところで大してパフォーマンス上がるわけではないんですがw
宜しく御願いします。
0070デフォルトの名無しさん
2008/05/13(火) 15:07:22#define mem_of_1(Type, MemberName) (&_1->*&Type::MemberName)
#define mem_of_2(Type, MemberName) (&_2->*&Type::MemberName)
みたいにして使ってるんだが、こういうの標準でも定義してもらえないものか・・・
オレ定義だと可搬性に欠けるのが難点で。
0071デフォルトの名無しさん
2008/05/13(火) 15:13:16何か線を引きたいようだけど C++ コンパイラで便利な C という位置づけもあるんじゃないか。
抽象化にこだわって変なソース書く人もいるわけだろ?
ようはスマートに処理をこなせるかということではないかな。
0072デフォルトの名無しさん
2008/05/13(火) 15:13:23できればプロポーショナルフォントを使いたいが、
そこら辺のフォントだとプログラミングには使いづらい。
ピリオドやカンマ、セミコロンが小さすぎる。ゼロには斜線が欲しい。
どこかプログラマのためのプロポーショナルフォントなんて出してくれないものか。
0073デフォルトの名無しさん
2008/05/13(火) 15:49:38boost-devel ML
にコード投稿したら
多分とりこんでもらえる
0074デフォルトの名無しさん
2008/05/13(火) 17:15:20ttp://www.boost.org/doc/libs/1_35_0/doc/html/lambda/le_in_details.html#lambda.members_variables_as_targets
でがまんしる
0075デフォルトの名無しさん
2008/05/13(火) 18:11:19VC6とかに入ってるFONTEDITで自分で作ればいい。
90文字程度作ればあとはフォントリンクして終わりだから簡単だぞ。
007675
2008/05/13(火) 18:32:390077デフォルトの名無しさん
2008/05/13(火) 21:02:53Windows だけなので問題ない。
0078デフォルトの名無しさん
2008/05/13(火) 21:23:300079デフォルトの名無しさん
2008/05/14(水) 07:18:51CっぽくてもC++で作られたライブラリはCじゃ使えないから線引きは必要だ
0080デフォルトの名無しさん
2008/05/19(月) 09:47:56補完が働くか試してみないか?
ttp://cedet.sourceforge.net/intellisense.shtml
0081デフォルトの名無しさん
2008/05/19(月) 17:37:45#include <boost/serialization/serialization.hpp>
struct S {
boost::array<int, 3> data;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, unsigned int ver) {
ar & data.c_array();
}
};
ttp://hw001.gate01.com/eggplant/tcf/cpp/boost_serialization.html#array
ここを見て、boost::array.c_array()で生の配列を取り出してシリアライズしようと思ったのですが、
error C2679: 二項演算子 '&' : 型 'int *' の右オペランドを扱う演算子が見つかりません (または変換できません)。
というエラーが出てしまいました。
どうやればシリアライズできますか?
0082デフォルトの名無しさん
2008/05/19(月) 20:56:44008381
2008/05/20(火) 13:03:27thx
コンパイル通りました。
データがpublicに置いてあるとは盲点でした。
連続で申し訳ないですが、もう1つ質問させて下さい。
Let's Boostで解説されているフルインストールをしたんですが、
ライブラリを必要とするboostを使ったものをビルドするとリンクエラーが出てしまいます。
例えば、
ttp://www.kmonos.net/alang/boost/classes/serialization.html
このサンプルをビルドすると、
a.obj : error LNK2001: 外部シンボル ""protected: __thiscall boost::archive::basic_text_iprimitive<class std::basic_istream<char,struct std::char_traits<char> > >
::~basic_text_iprimitive<class std::basic_istream<char,struct std::char_traits<char> > >(void)"
(??1?$basic_text_iprimitive@V?$basic_istream@DU?$char_traits@D@std@@@std@@@archive@boost@@IAE@XZ)" は未解決です。
といったa.objでのerror LNK2001が7個(a.objはサンプルソースをコピペした.cpp)
libboost_serialization-vc80-mt-gd-1_34_1.lib(basic_serializer_map.obj) : error LNK2001: 外部シンボル ""__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)"
(__imp_??1_Container_base@std@@QAE@XZ)" は未解決です。
といったlibboost_serialization-vc80-mt-gd-1_34_1.libでのerror LNK2001が12個出ます。
libboost_serialization-vc80-mt-gd-1_34_1.libでエラーが出るということは、
ライブラリへのパスが通ってないわけじゃないと思うんですが、原因はどこにあるのでしょうか?
0084デフォルトの名無しさん
2008/05/20(火) 19:38:030085デフォルトの名無しさん
2008/05/20(火) 20:38:55008683
2008/05/21(水) 08:34:22いろいろ変えてみたら、/MTでlibboost_serialization-vc80-mt-gd-1_34_1.libでのエラーが消えましたが、
a.objでのエラー7個が残ったままです。
>>85
すみません、詳しくお願いします。
環境はVC2008EEです(書き忘れてましたすみません)。
0087デフォルトの名無しさん
2008/05/21(水) 08:39:25http://www.nabble.com/Preliminary-0.9.0-tarballs---VC++-2008-Express-td14142470.html
0088デフォルトの名無しさん
2008/05/21(水) 12:41:54たしか設定済みmeadowに入ってたよね
meadowとVisual Studio組み合わせられると便利なんだけどね
008983
2008/05/21(水) 14:38:36よく理解しないまま、
http://www.nabble.com/Re%3A-Preliminary-0.9.0-tarballs---VC%2B%2B-2008-Express-p14161224.html
に書かれているコードをそれぞれのファイルの末尾に追加してみました。
そして、例のサンプルをビルドしたらエラーは、
C:\Library\boost_1_34_1\boost/config/compiler/visualc.hpp(180) : fatal error C1189: #error :
"Compiler not supported or configured - please reconfigure"
の1つになりました。
うーん、自分の知識が足りないか・・・。
0090デフォルトの名無しさん
2008/05/21(水) 16:51:34おそらくVC8の設定でライブラリをビルドしてしまっているから
VC9EEの設定で構築しなおす必要がある。
そのURLに載っているファイル4つを編集してbjam --toolset=msvc-9.0すればいい。
>ファイルの末尾に追加
差分の見方がわからないならdiff unifiedでぐぐれ
つーか1_35_0使えばいいんじゃないのか?
0092デフォルトの名無しさん
2008/05/24(土) 14:55:48adjacent_vertices()は、adjacency_iteratorのpairを返すのですが、
このイテレータはSTLのRandomAccessIterator要件を満たすと
ドキュメントに書いてあるのですが、以下のコードのように
イテレータに加算すると、コンパイルが通りません。
これは、私のコードに問題があるのでしょうか?
// VertexProp, EdgePropは適当に定義
typedef adjacency_list<setS, vecS, undirectedS,
VertexProp, EdgeProp> Graph;
Graph G;
// Gに頂点やエッジを追加してグラフを作成
// vはGの1頂点で、隣接する頂点は複数個存在
tie(ai, ae) = adjacent_vertices(v, G);
vertex(*(ai+1), G); // コンパイルエラー
ちなみに、環境は以下の通りです。
boost: 1.34.1
コンパイラ: GCC 4.2.3
0093デフォルトの名無しさん
2008/05/24(土) 18:20:21どこに書いてあります?
OutEdgeList を setS で設定しているので,
RandomAccessIterator の要件は満たさないと思いますよ.
0094デフォルトの名無しさん
2008/05/25(日) 09:06:16http://www.boost.org/doc/libs/1_35_0/libs/graph/doc/adjacency_iterator.html
のMEMBERS OFの項に、
The adjacency iterator type implements the member functions and
operators required of the Random Access Iterator concept, except
that the reference type is the same as the value_type so operator*()
returns by-value.
と記述があるのです。この説明はadjacency_iterator_generator::typeに
ついてのものだと思っていたのですが、勘違いでしょうか?
もう一度ドキュメントを読み返してみたら、MODEL OFの項に
The adjacency iterator adaptor (the type adjacency_iterator_generator<...>::type)
is a model of Multi-Pass Input Iterator .
と記述されていました。これならば、operator+()が定義されていなくても
当然なのですが、ちょっと混乱しています。
0095デフォルトの名無しさん
2008/05/25(日) 10:13:04adjacency iterator adaptor は out edge iterator を adapt して
operator* の動作を edge の target を返す動作に書き換えるだけだと思います.
なのでそのドキュメントは間違っているのではないかと思います.
adjacency iterator adaptor はベースになっている out edge iterator が
-Multi-Pass Input Iterator なら Multi-Pass Input Iterator
-Forward Iterator なら Forward Iterator
-(ry
という具合に,単にベースの out edge iterator が
どの concept の model かを投影するだけ,というのが正しいのではないかと.
009695
2008/05/25(日) 10:14:21それから adjacency_list の adjacency_iterator は
別に adjacency_iterator_adaptor で実装されているとは限らないので,
読むべきドキュメントは adjacency_iterator_adaptor のドキュメントではなくて
あくまで adjacency_list のドキュメントかと思います.
ただ, adjacency_list において adjacency_iterator と out_edge_iterator が
どの iterator concept のモデルなのかの関係については,
↑の議論が踏襲されるのが自然とは思います.
そして現に, Adjacency List のドキュメント
http://www.boost.org/doc/libs/1_35_0/libs/graph/doc/adjacency_list.html
では, "The adjacency_iterator models the same iterator concept as out_edge_iterator. " と
書いてあります.
009795
2008/05/25(日) 10:20:15>>92 で adjacency_list の OutEdgeList テンプレートパラメタに setS を指定しているので,
out_edge_iterator は Bidirectional Iterator concept のモデルになり,
従って adjacency_iterator も Bidirectional Iterator concept のモデルなので,
>>92 のランダムアクセスではコンパイルが通らないのだと思います.
009892
2008/05/25(日) 13:45:24まずadjacency_listの解説をよく読むべきでした。
OutEdgeListにsetSを使っているのは、エッジの重複を許したくないと
いうのが理由でした。グラフを読み込む際にエッジの重複をチェック
するようにして、OutEdgeListにはRandomAccessIteratorにするように
すればいいのかとも思いますが、そうするとエッジに対する各操作の
時間複雑度も変わってきてしまい、なかなか悩みどころですね。
よく考えてアルゴリズムを実装します。
0099デフォルトの名無しさん
2008/05/31(土) 16:38:480100デフォルトの名無しさん
2008/05/31(土) 16:44:170101デフォルトの名無しさん
2008/06/01(日) 21:59:24しかし実際に使ってみると「定義されていない識別子です。」と言うエラーが出てコンパイル出来ません。
パスが通っていないのかと思い、以下のように通してみましたが駄目でした。
インストールしたライブラリのタイプ(?)はマルチスレッドとマルチスレッドデバックのみです。
実行ファイルパス…C:\Program Files\boost\boost_1_35_0\bin
インクルードファイル…C:\Program Files\boost\boost_1_35_0
ライブラリファイル…C:\Program Files\boost\boost_1_35_0\lib
0102デフォルトの名無しさん
2008/06/01(日) 22:02:070103デフォルトの名無しさん
2008/06/01(日) 22:30:240104101
2008/06/01(日) 23:00:030105デフォルトの名無しさん
2008/06/02(月) 01:07:460106デフォルトの名無しさん
2008/06/02(月) 07:33:20あれの機能は他に取り込まれているから。
0107デフォルトの名無しさん
2008/06/02(月) 12:19:380108デフォルトの名無しさん
2008/06/02(月) 20:35:06Bjam+MSVC9でビルドに数時間掛かる。
コマンドプロンプトを見ると、暫く止まって・急に動いての繰り返しでCPUメータを見ても殆ど動いてない。
CPUを100%使い切って構わないのでさっさとビルドを済ませるオプションはありませんか?
0109デフォルトの名無しさん
2008/06/02(月) 20:46:290110デフォルトの名無しさん
2008/06/02(月) 20:50:070111デフォルトの名無しさん
2008/06/02(月) 21:37:51CPUはCore2Quad 3GHz、メモリは8GBです。
トライ&エラーというとコマンドプロンプトはWarningの嵐ですが、どこかミスしているのでしょうか。
ビルドオプションは
bjam --toolset=msvc -a link=static,shared threading=multi release debug stage
ビルド環境はVS2008EE SP1beta+Windows SDK 6.0.6001.18000.367です。
試しに今もう一度ビルドしていますが、20時32分に最初のライブラリが出来て
21時24分の時点で出来上がったライブラリ数は21、21時36分現在は49です。
0112デフォルトの名無しさん
2008/06/02(月) 21:49:14監視ログにHDDの不調でてないか?
0113デフォルトの名無しさん
2008/06/02(月) 21:55:19core2Quad 2,4G 2Gbyteだけど全然かからなかったなあ。
今bin.v2とstageタイムスタンプ見たら10分ぐらいしか幅がない。
CPUメータ上がらないのは変だね。ウイルス対策ソフトとか遅くないか?
0114デフォルトの名無しさん
2008/06/02(月) 22:57:24VS2008EEをGUIで立ち上げて他のプロジェクトをビルドするときは4コアを100%使い切って
数分で終わるのですが・・・。22時53分現在のビルド数は102個、大量のWarningはC4819(ソースの文字コード絡み?)です。
動作的にはC4819大量発生→20~30秒程沈黙の繰り返しで、HDDへのアクセスは常に続いていますが動作が散発的です。
セキュリティ関係はVista標準のFirewallのみでDefenderは切ってあります。
Boostの本題と関係無い話でスレを潰すのもあまり好ましくないと思いますので、
似た事例が無いかネット上を探してみます。
0115デフォルトの名無しさん
2008/06/03(火) 00:59:14214ファイルで4時間15分・・・orz
0116デフォルトの名無しさん
2008/06/03(火) 20:04:34逐一リポジトリの最新版チェックしてるとか
0117デフォルトの名無しさん
2008/06/04(水) 01:50:21環境変数CLに登録しておくと文字コードの警告表示されなくてすむよ
0118デフォルトの名無しさん
2008/06/04(水) 02:23:24文字が化けてそれ以降のコードが滅茶苦茶になってた事があったから。
0119デフォルトの名無しさん
2008/06/04(水) 02:43:08有難うございます。感謝感激です。
CLに/wd4819をセットしたらビルドが22分で終わりました。CPU使用率も30%前後まで上がりました。
大量のC4819が原因だったみたいです。
警告の原因は多分これでしょうか。
ネットで調べてみるとVisual StudioにはUTF-8Nを読めずC4819を誤検出するバグがあるらしく、
一部のファイルをUTF-8で保存し直せば黙るみたいです(まだ試していません)。
ttp://www.ccm.media.kyoto-u.ac.jp/~aoyama/index.php?Note%2FPrograming%2FWin32#u5a7e582
0120デフォルトの名無しさん
2008/06/04(水) 03:10:330121デフォルトの名無しさん
2008/06/04(水) 03:26:230122デフォルトの名無しさん
2008/06/04(水) 23:51:24それsvnで直接拾ってきたソース?
もしそうならsvnで落とすときに言語設定が日本語になっていて日付が日本語表記になったせいだと思う
0123デフォルトの名無しさん
2008/06/05(木) 00:50:43ソースはsvnからTortoiseSVNで落としてきて、tools/bjamフォルダ内のbuild_dist.batで組んだbjamで
ビルドしてます。
言語環境は日本語Vista SP1に英語パックを入れた状態ですが、
日本語の文字化けの関係でシステムロケールは日本語にしています。
今見たら日付のフォーマットはLong dateが漢字を使っていたので英語にしました。
次回のビルドで検証してみます。
0124デフォルトの名無しさん
2008/06/05(木) 03:29:40/wd4819を設定しなくてもC4819の発生が激減しました。
ビルドも24分で完了しました。有難うございます。
0125デフォルトの名無しさん
2008/06/05(木) 03:59:02やっぱり結論が書いてあるとよい
質問主も回答者も乙
0126デフォルトの名無しさん
2008/06/06(金) 09:02:280127デフォルトの名無しさん
2008/06/06(金) 10:26:55即座に空欄にした。
あの時ほど、死ね2chねらと思ったことはない。
0128デフォルトの名無しさん
2008/06/06(金) 15:28:280129デフォルトの名無しさん
2008/06/11(水) 14:00:59event
timer
に相当するものがないのはなぜ?
0130デフォルトの名無しさん
2008/06/11(水) 14:30:200131デフォルトの名無しさん
2008/06/11(水) 14:40:50そういえばboostに日本人作のものって入ってるの?
0132デフォルトの名無しさん
2008/06/11(水) 15:59:440134デフォルトの名無しさん
2008/06/11(水) 17:12:180135デフォルトの名無しさん
2008/06/11(水) 18:26:59boost::rangeの一部(MFCコンテナ用range)は日本人っぽい名前だったような。
あとこないだまでレビューしてたboost::eggも多分そう。
0136デフォルトの名無しさん
2008/06/11(水) 19:29:51boostは心が広いなぁ、ホント素敵!
0137デフォルトの名無しさん
2008/06/11(水) 19:40:030138デフォルトの名無しさん
2008/06/11(水) 19:53:230139デフォルトの名無しさん
2008/06/11(水) 20:50:380140デフォルトの名無しさん
2008/06/11(水) 20:55:22ってなんであんなにごちゃごちゃしてるの?
boost::date_time
boost::x_time
boost::system_time
0141デフォルトの名無しさん
2008/06/11(水) 21:03:260142デフォルトの名無しさん
2008/06/12(木) 02:29:45そのうちDirectSoundと同じ位気軽にASIOを扱える様になるんだろうか。
0143デフォルトの名無しさん
2008/06/12(木) 02:32:12穴があったら入りたい
0144デフォルトの名無しさん
2008/06/12(木) 02:44:500145デフォルトの名無しさん
2008/06/12(木) 03:02:400146デフォルトの名無しさん
2008/06/12(木) 06:56:32http://jp.rubyist.net/magazine/?0018-Legwork
こんな記事も書いてたぞ。
0147デフォルトの名無しさん
2008/06/12(木) 12:29:48悪いものに何を付け足しても良くならないと考えるんじゃない?
0148デフォルトの名無しさん
2008/06/12(木) 13:59:500149デフォルトの名無しさん
2008/06/12(木) 14:07:470150デフォルトの名無しさん
2008/06/12(木) 17:46:020151デフォルトの名無しさん
2008/06/12(木) 18:03:270152デフォルトの名無しさん
2008/06/12(木) 18:10:520153デフォルトの名無しさん
2008/06/12(木) 18:28:07rubyがboostに対応させる?
0154デフォルトの名無しさん
2008/06/12(木) 19:38:59Rubyは
0155デフォルトの名無しさん
2008/06/12(木) 20:09:150156デフォルトの名無しさん
2008/06/12(木) 21:15:450157デフォルトの名無しさん
2008/06/12(木) 22:19:120158デフォルトの名無しさん
2008/06/12(木) 22:25:49あなた様がいなければ、CやC++といった素晴らしい言語は生まれませんでした
0159デフォルトの名無しさん
2008/06/12(木) 22:30:470160デフォルトの名無しさん
2008/06/12(木) 22:32:130161デフォルトの名無しさん
2008/06/13(金) 09:38:24Boost.SOAP
Boost.CORBA
誰か作ってケロ
0162デフォルトの名無しさん
2008/06/13(金) 10:49:420163デフォルトの名無しさん
2008/06/13(金) 12:20:140164デフォルトの名無しさん
2008/06/13(金) 15:10:55しかもMPL使いまくりなのを
0165デフォルトの名無しさん
2008/06/14(土) 18:42:390166デフォルトの名無しさん
2008/06/14(土) 21:51:58でも auto ほど簡単な記述はできないか。
0167デフォルトの名無しさん
2008/06/14(土) 22:17:230168デフォルトの名無しさん
2008/06/14(土) 22:32:40>規定型とはC言語時代のint
0169デフォルトの名無しさん
2008/06/16(月) 01:43:17特にテンプレート周りの環境変化は浦島状態なんですが、なにかお勧めの書籍ないですか?
細かいところはWebでしか追いかけられないのは承知ですが、まとまった内容は書籍の方が体系的に吸収できると思うので。
リハビリでModern C++ Designは読みましたが、今となってはあれも古い本だよねぇ。
LokiはBoostに吸収されてしまってるのかな?
0170デフォルトの名無しさん
2008/06/16(月) 05:15:28以上からお勧めの書籍は存在しないという結論に至る。
まあ導入くらいが目的なら、そこらに落ちてるboost本なら何でも。
0171デフォルトの名無しさん
2008/06/16(月) 07:00:150172デフォルトの名無しさん
2008/06/16(月) 09:08:23Boostスレだけど、C++一般なんだよね?
「C++ Coding Standards−101のルール、ガイドライン、ベストプラクティス」
これが今のところ網羅的な本。初心者にもルール集としては便利だけど、
内容は中級以上じゃないと理解できない。
>>171
つ Beyond the C++ Standard Library: An Introduction to Boost
つ The Boost Graph Library: User Guide and Reference Manual
0173デフォルトの名無しさん
2008/06/16(月) 09:47:36>>169
C++ Template Metaprogramming
テンプレートっていうかBoostのTMPの本だがリハビリには丁度良いかと
0174173
2008/06/16(月) 09:50:28-日本語は俺も稲葉著以外ないでしょ
+日本語は俺も稲葉著以外知らない
稲葉のも糞とは言わんが内容的に半端だからなぁ
0175デフォルトの名無しさん
2008/06/16(月) 11:50:03とりあえず上がってるやつで日本語のものから優先で読んでみまつね。楽しみです。
ところですれ違いならごめんなさい。
実装環境ですが、WindowsとUnixの両方で動くようなプログラム作成を想定してて
現時点でなるべく新しいものをということで、WindowsはVC9(2008)、UnixはGCCの使用を考えてます。
ここでBoostは、1種類しか実装版がないようなので迷う必要がないですが
STLは、STLPortがいいのでしょうか。それともVC・GCCにはじめから添付されてる(?)やつを使うのが普通ですか?
たぶん性能と導入容易性とでみなさん天秤にかけておられるのと思いますが…。
LokiはTypelistなどMeta Programming関連が非常に興味深かったですが、
有用なものはBoostに包含されていて、とりあえずBoost使ってればOKな感じですか?
ぐぐるとLoki自体はバグがそれなりにとかあったので、仕事には使いづらいのかなとも…。
ちょっと空気が読みきれてなくて、初歩的な質問すまそです。
0176デフォルトの名無しさん
2008/06/16(月) 12:01:270177デフォルトの名無しさん
2008/06/16(月) 13:46:26・Boostの前にTR1
・g++は最新のものを附属のlibstdc++と一緒に
・VC++は「必ず」最新のものを、必要になった時にSTLportと
・暇があればConceptGCCも試す
0178デフォルトの名無しさん
2008/06/16(月) 13:48:230179デフォルトの名無しさん
2008/06/16(月) 14:20:270180デフォルトの名無しさん
2008/06/16(月) 23:46:07どうもありがとう!
0181デフォルトの名無しさん
2008/06/17(火) 20:12:12ふざけてるの?
0182デフォルトの名無しさん
2008/06/17(火) 21:52:150183デフォルトの名無しさん
2008/06/17(火) 21:53:520184デフォルトの名無しさん
2008/06/17(火) 21:56:38俺も高性能なPCが欲しくて仕方がない。
0185デフォルトの名無しさん
2008/06/17(火) 23:15:09boost使い始めるとコンパイルが見る見る遅くなるんで笑った。
テンプレートを実体化するものをヘッダーに置くとすさまじく遅くなるようだ。BOOST_CLASS_EXPORTとか遅いね。cppで実体化させる様にすると速くなる。
0186デフォルトの名無しさん
2008/06/18(水) 12:37:060187デフォルトの名無しさん
2008/06/18(水) 12:41:370188デフォルトの名無しさん
2008/06/18(水) 12:52:46単なるhello, worldにも異常にコンパイル時間かかるから断念した
これならSWIGやpyrexみたいなの使ったほうがいい
ターンアラウンド遅すぎるしコンパイラのエラーメッセージは不可解だから、
学習やおためしには不向きだな
俺みたいなヘタレは、デバッガつかってもboostのコードは追いきれる自信ねえよ
難解なマクロとテンプレートのコンビ技の嵐だし
0189デフォルトの名無しさん
2008/06/18(水) 14:59:12メソッドはあるでしょうか?
0190デフォルトの名無しさん
2008/06/18(水) 20:01:210191デフォルトの名無しさん
2008/06/18(水) 20:32:13配列のアドレス情報は含まれないはずです。
0192デフォルトの名無しさん
2008/06/18(水) 20:45:150193デフォルトの名無しさん
2008/06/18(水) 21:35:40template<class T> T& ptr_vector<T>::operator[]( size_type pos ) { return *v[pos]; }
のような実装になっていると思う。
実際に欲しいアドレスは &v[0] だけど、&pv[0] とすると v[0] を得てしまう。
0194デフォルトの名無しさん
2008/06/18(水) 22:23:220195デフォルトの名無しさん
2008/06/18(水) 23:09:290196デフォルトの名無しさん
2008/06/18(水) 23:17:01GLibのGModuleみたいな。
0197デフォルトの名無しさん
2008/06/19(木) 00:38:35c_arrayメンバ関数
0198デフォルトの名無しさん
2008/06/19(木) 02:19:13おお、こんなのがあったんですか。ありがとうございました。
0199デフォルトの名無しさん
2008/06/19(木) 21:49:56multi_arrayを試してみたのですがA+Bといった処理ができなくて・・・
matrixだと2次元行列しか対応してないのでしょか?
0200デフォルトの名無しさん
2008/06/20(金) 03:32:21uBLAS
0201デフォルトの名無しさん
2008/06/20(金) 14:53:120で穴埋めしか方法はないのでしょうか?
0202デフォルトの名無しさん
2008/06/20(金) 16:44:28printfと同じ書式指定でできると思うけど、それじゃ不足?
std::cout << boost::format("%8d") % 42 << std::endl;
みたいな感じ
0203デフォルトの名無しさん
2008/06/20(金) 16:53:19swigを試してみてboost.pythonの偉大さに気がつくだろう
c++とpython組み合わせるならこれかctypes以外の選択はありえない
swigが動くのはtoy problemだけ
0204デフォルトの名無しさん
2008/06/20(金) 16:54:50同じ疑問を前にもったことあるけど、前に探したときはいいのなかった
0205デフォルトの名無しさん
2008/06/20(金) 18:10:04そうかな。
boost.pythonのチュートリアルの最初の例である
"hello, world"を返すだけの関数なんだが、char*をwchar_t*に
変えてみただけで、長いコンパイル時間の末に、糞長く意味不明な
コンパイルエラーの列に遭遇した。
俺はchar*→PyStringに対応するwchar*→PyUnicodeの自然なマッピングが当然
存在するだろうと想像したが、実際にはそうではなかったわけだ。
ヘッダを潜ってみて、どうやらwstringならイケることが分かったけれども
こんなことはやってられないな、と思ったよ。
0206デフォルトの名無しさん
2008/06/20(金) 18:26:58wstringで変換できるならやればいいだろ。
いみがわからん。
0207デフォルトの名無しさん
2008/06/20(金) 18:31:190208デフォルトの名無しさん
2008/06/20(金) 18:32:32その「ミス」がわかるまで遅すぎる(時間がかかる)上に、
エラーメッセージがhuman readableでないから、原因を特定するのに
異常に時間がかかると言ってるんだよ
だいたい、char*やwstringはイケてwchar_t*はダメなんてデザインは
一貫性も糞も無いし、そんなの予想できないよ
0209デフォルトの名無しさん
2008/06/20(金) 18:33:08うん。通ったよ。
Pythonからインポートして、unicode文字列が得られることも確認した。
0210デフォルトの名無しさん
2008/06/20(金) 19:42:30ほへー。 俺も試してみるか。
0211デフォルトの名無しさん
2008/06/20(金) 19:52:02まぁ確かに他にもドキュメントの読み辛さとかembeddingの弱さとか色々発展途上の感じは否めないが、
そこだけを叩いて使えねぇとするのはいささか不公平だろうよ。
objectからattrで名前を取り出してそのままoperator()で関数が呼べる便利さとか
extract<>で大体のデータ型は上手いこと取り出せたりする所とかをもっと評価してやるべきだと思う。
0212デフォルトの名無しさん
2008/06/20(金) 19:58:56うん、凄そうなのは分かってるんだよ
ただ、いざとなったらヘッダ読み込む気合が無いととてもついていけない世界だなと
改めて感じたってことさ
trivialなhello, worldの例でUnicodeが使えるかどうかを確かめるのに
俺がどんだけ時間かけたと思う?
ま、そういうパワーがある人は羨ましいっつーことで
嫉妬乙、とでも思ってくれ
0214デフォルトの名無しさん
2008/06/20(金) 21:41:440215デフォルトの名無しさん
2008/06/24(火) 13:02:41swigはとにかくありえない
0216デフォルトの名無しさん
2008/06/24(火) 19:51:44日本語VSにはこないの?
0217デフォルトの名無しさん
2008/06/24(火) 20:03:540218デフォルトの名無しさん
2008/06/24(火) 20:06:53VS2008買っちゃおうかしら...
0219デフォルトの名無しさん
2008/06/24(火) 20:10:34俺はMFC目的だが
0220デフォルトの名無しさん
2008/06/24(火) 22:14:09でもプログラミングする時間が・・・
0221デフォルトの名無しさん
2008/06/25(水) 21:03:16template<typename TL /* boost::mpl::vector */ >
class foo
{
typedef boost::mpl::at<TL,0> T0; T0 _f0;
typedef boost::mpl::at<TL,1> T1; T1 _f1;
...
typedef boost::mpl::at<TL,n> Tn; Tn _fn;
};
みたいなのを任意の長さのvectorについて自動的に生成するには
どうすればよいのでしょうか
BOOST_PP_REPEAT等では案の定上手くいきませんでした
ご教示ください
0222デフォルトの名無しさん
2008/06/26(木) 05:16:30マクロレベルじゃなくてTMPレベルで自動生成したいって事か?
ならBOOST_PP_REPEATで予め256通りの特殊化を作っておく必要がある。
0223221
2008/06/26(木) 08:31:47template<typename TL>
class foo
{
typedef boost::mpl::size<TL> Size;
BOOST_PP_REPEAT(Size::value, GEN, data);
}
で怒られたわけです。
Size::value の代わりにリテラルにすると展開してくれます
PPの処理順序の問題化と
0224221
2008/06/26(木) 08:44:230225デフォルトの名無しさん
2008/06/26(木) 08:48:54BOOST_PP_REPEAT(256, asdf, nil)
#define asdf(z, i, nil) BOOST_PP_REPEAT(i, zxcv, nil)
#define zxcv(z, i, nil) \
template< BOOST_PP_REPEAT(i, qwer, nil) > \
struct foo< mpl::vector< BOOST_PP_REPEAT(i, sdfg, nil) > >{ BOOST_PP_REPEAT(i, xcbv, nil) };
#define qwer(z, i, nil) BOOST_PP_COMMA_IF(i) typename type_ ## i
#define sdfg(z, i, nil) BOOST_PP_COMMA_IF(i) type_ ## i
#define xcbv(z, i, nil) typedef type_ ## i T ## i; T ## i _f ## i;
こうか。
0226デフォルトの名無しさん
2008/06/26(木) 08:51:40コンパイラには通してないから適当に間違ってる所があったら修正してくれ。
0228デフォルトの名無しさん
2008/06/26(木) 10:29:130229デフォルトの名無しさん
2008/06/27(金) 10:46:38VC2008の対応はここを参考にしてます。
http://www.02.246.ne.jp/~torutk/cxx/vc/vcpp90.html
boost::iostreams::zlib_compressorを使いたいのですがリンカでlibboost_zlib-vc90-*-1_34_1.libがないと怒られます。
そこでこんな感じでlibboost_zlib-vc90-*-1_34_1.libのビルドを試みたのですが…。
set NO_COMPRESSION=0
set NO_ZLIB=0
set ZLIB_SOURCE=C:\hoge\boost\zlib\src
bjam --prefix="C:\hoge\boost\boost_1_34_1" --toolset=msvc-9.0 -f zlib.jam
"-sBUILD=release debug <threading>single/multi <runtime-link>static/dynamic"
こんなエラーが出てダメでした。
zlib.jam:90: in module scope
rule cond unknown in module
どうやればlibboost_zlib-vc90-*-1_34_1.libを作れるのでしょうか?
0230デフォルトの名無しさん
2008/06/27(金) 11:57:010231デフォルトの名無しさん
2008/06/27(金) 17:32:450232デフォルトの名無しさん
2008/06/27(金) 17:59:320233デフォルトの名無しさん
2008/06/27(金) 18:03:16gzipもbzip2も空白になってるが。
0234デフォルトの名無しさん
2008/06/27(金) 18:52:33>90-91
0235デフォルトの名無しさん
2008/06/27(金) 21:50:26興味がおありでしたらVC2008用ライブラリ一式をどこかに上げますが如何致しましょう。
0236デフォルトの名無しさん
2008/06/27(金) 22:23:300237デフォルトの名無しさん
2008/06/27(金) 22:29:580238デフォルトの名無しさん
2008/06/27(金) 23:12:25>>236
ビルド方法なんて散々既出だとおもうが。
0239デフォルトの名無しさん
2008/06/28(土) 00:50:25こんな感じで如何でしょう。
ttp://booster.x0.to/build.txt
ついでにライブラリも。全部揃ってるかな?
ttp://booster.x0.to/boost_1_36_svn46766.rar
あ、私>>108でございます。
0240デフォルトの名無しさん
2008/06/28(土) 00:58:080241デフォルトの名無しさん
2008/06/28(土) 01:01:20Boostはビルドしているだけで未だ利用迄手が回っていない状態でございます・・・
0242デフォルトの名無しさん
2008/06/28(土) 03:14:420243デフォルトの名無しさん
2008/06/28(土) 05:29:58GJGJ
0244デフォルトの名無しさん
2008/06/28(土) 09:37:11サンクス
次からテンプレに入れたいなこれ
0245デフォルトの名無しさん
2008/06/28(土) 10:40:43朝起きてSVNを更新してみたらFixが大量に為されていたので、svn46798をビルドして上げておきました。
ttp://booster.x0.to
ドメインbooster.x0.toは一時公開用に取っただけだったのですが、
割と需要があるみたいですのでこのまま維持して週一位の間隔でSVNをビルドして上げていこうかと思います。
0246デフォルトの名無しさん
2008/06/28(土) 12:26:280247デフォルトの名無しさん
2008/06/29(日) 15:39:09つhttp://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Googleがお前らを気狂い認定w
0248デフォルトの名無しさん
2008/06/29(日) 15:46:34C++ユーザーなんて認定上等! だろうなぁw
0249デフォルトの名無しさん
2008/06/29(日) 16:33:020250デフォルトの名無しさん
2008/06/29(日) 16:40:150251デフォルトの名無しさん
2008/06/29(日) 16:50:53>such as metaprogramming and other advanced template techniques,
>and an excessively "functional" style of programming.
フヒヒw
>Currently, only boost/compressed_pair.hpp is permitted.
何故にcompressed pairだけ許可されているんだろう。
0252デフォルトの名無しさん
2008/06/29(日) 17:04:52続きの文章をコピペしないのは公平とはいえないな。
>We are actively considering adding other Boost features to the list, so this rule may be relaxed in the future.
我々は他のBoost機能をリストに加えることを活発に考えているので、この規則は将来緩和されるかもしれません。
0253デフォルトの名無しさん
2008/06/29(日) 17:24:18We do not use C++ exceptions.
We do not use Run Time Type Information (RTTI).
ってどうよ
0254デフォルトの名無しさん
2008/06/29(日) 17:39:56想像するだけでもぞっとしないし、至極妥当だと思うけど
なんか問題あったら適当に諦めて試合終了していいオモチャじゃなきゃ
そこらは慎重にならざるを得ないんじゃないの
0255デフォルトの名無しさん
2008/06/29(日) 17:59:340256デフォルトの名無しさん
2008/06/29(日) 18:05:24いや、それはどうでもいいんだ。
何で現時点で、compressed pairだけ許可されているのか気になるんだ。
あれってそんなに使い勝手がいいものじゃないだろ?
>>253
Googleにとって大抵のエラーは例外的なエラーではないんじゃない?
基本的に奴らは多数のコンピュータでスケールさせりゃいいって考えだし、
ハードの故障なんてしょっちゅうだし。
dynamic_castとかtypeidとかは、普通使う必要はないだろ。
ユニットテストには使っていいって書いてあるし。
実際デバッグぐらいに使うのが妥当だろ。
0257デフォルトの名無しさん
2008/06/29(日) 18:07:36Joel Spolskyも例外嫌いと言ってたけど
大体googleと同じ理由だったな
C++にはRAIIのようなテクニックはあるけど、彼らは非常に多くの顧客を
相手にしていて信頼性や性能の要求水準が非常に高いから、
例外を使いつつ、同時に要求される信頼性や性能を達成するってのが、
結局割に合わないってだけなんだよ
0258デフォルトの名無しさん
2008/06/29(日) 18:49:35それ例外の使い方間違ってないか?
例外安全意識して書いてれば
> なんか問題あったら適当に諦めて試合終了
なんてことにはならないんだが。
0259デフォルトの名無しさん
2008/06/29(日) 18:51:57万一拾い忘れたとき(コード人為的ミス)
(1) 例外の場合 : プログラム停止
(2) エラー値返しの場合 : エラー無視
で、デフォルトとしては(2)の方がまだましということかな?
だとすればRAIIとは関係ない論点ということになる?
0260デフォルトの名無しさん
2008/06/29(日) 18:59:35(1) のほうがマシと考える人も相当数いるとおもうから、それは理由には
ならないんじゃないか?
・例外使う派(既存のコードや人)と使わない派を組み合わせるとマズイ。
・例外安全という新しい概念が前面に押し出されていて面倒。
こんなところかと。
後者はエラーコードでも同じ話が出てくるはずなんだけどな。なぜか
例外に限った話だという迷信(?)が根強い。
0261デフォルトの名無しさん
2008/06/29(日) 19:23:440262デフォルトの名無しさん
2008/06/29(日) 19:36:330263デフォルトの名無しさん
2008/06/29(日) 19:37:28その程度のレベルの話はgoogle的には問題にもなっていない。
RAIIはあくまで「リソースリークを避けられる」だけだ。
RAIIさえ使ってれば例外安全、と思ってるならそれは違う、と言わざるを得ない。
例えば何か複雑なデータ構造を更新している最中に例外を投げられても
それで諦めて試合終了してはいけないプログラムであるような場合に、
真にコードが真に「例外安全」であることを保障するためのコストが、
例外により儲かるbenefitと全く釣り合ってないって話だろ。
0264デフォルトの名無しさん
2008/06/29(日) 19:44:53例外使わなければエラー発生時の安全性を保証するのが簡単になるの?
0265デフォルトの名無しさん
2008/06/29(日) 19:48:38Joelが書いているが、極端な話、非常にクリティカルな場所では
例外安全性を保障するために一文ごとにtry .. catchを使うことになる。
それは恐ろしく冗長で醜い。
それぐらいなら、古きよきエラーハンドリングのほうがまだマシだって話だろ。
0266デフォルトの名無しさん
2008/06/29(日) 19:54:05まさか、URL文字列の解読なんかじゃないよね?
0267デフォルトの名無しさん
2008/06/29(日) 19:54:060268デフォルトの名無しさん
2008/06/29(日) 19:58:18googleやJoelに言えよ。
カーネルがinodeやbtree更新してる最中に放り投げてファイルシステム
ぶっこわれたら困るだろ?
無論、i++;みたいな例外を投げないことが分かっているコードなら別だが、
関数呼び出しのようなものを含む場合は、それが例外を直接ないし間接に
投げないことを保障するにはcall treeを全部たどるしかない。
つまり、そのコードが例外安全かどうか、「正しい」コードかどうかを
判断するのが読み手にとってずっと困難になる。
言っておくが、皆が皆例外を使うべきじゃないなんて俺は一言も言ってないぞ。
奴らの要求水準にとってはそれが妥当なコーディングルールなのだろうと
言ってるだけだ。
0269デフォルトの名無しさん
2008/06/29(日) 20:03:16例外処理で吹き飛ぶファイルシステムって、停電でも吹き飛びそうで怖いな。
しかし、なぜに例外を禁止するかの具体的な理由は後学のために知りたいもんだけど。
0270デフォルトの名無しさん
2008/06/29(日) 20:05:170271デフォルトの名無しさん
2008/06/29(日) 20:05:380272デフォルトの名無しさん
2008/06/29(日) 20:33:250273デフォルトの名無しさん
2008/06/29(日) 20:42:22C++、Java、PythonがGoogleの公用語だったはず。
JavaはSUNと共同開発だかなんだかする位。
Pythonは作者を雇っちゃってる。
0274デフォルトの名無しさん
2008/06/29(日) 20:47:050275デフォルトの名無しさん
2008/06/29(日) 21:58:33不具合対処のデバッグが極端に難しくなるのが、原因だと思う。
少なくともWindowsだと落ちてくれる方が、不具合対処はよっぽど楽だし。
0276デフォルトの名無しさん
2008/06/29(日) 22:43:001行目は、終了処理はデストラクタで。
2行目は、なんだろう?
3行目は、落ちてくれるほうがいいなら例外マジおすすめ。
ってことで、2行目詳しく。
0277デフォルトの名無しさん
2008/06/29(日) 22:57:32mainでcatchしてると、例外の箇所でデバッガがブレークしてくれないよー。なんてことじゃないことを祈る
0278デフォルトの名無しさん
2008/06/30(月) 00:17:50後付けでまだまだうまくライブラリ群に融合してないからでしょう。
例外機構そのものには問題はない。
> カーネルがinodeやbtree更新してる最中に放り投げてファイルシステム
> ぶっこわれたら困るだろ?
例外を全く理解してない。30年くらい前の頭。
0279デフォルトの名無しさん
2008/06/30(月) 00:21:07しつこく食い下がる割に、ビッグネームの言い分に立ち向かうことには及び腰で
あくまで「ここの連中の言葉」だけ相手にしたがるお前にワラタ。
0280デフォルトの名無しさん
2008/06/30(月) 00:21:140281デフォルトの名無しさん
2008/06/30(月) 00:24:00短絡思考
0282デフォルトの名無しさん
2008/06/30(月) 00:24:42解説お願いします
0283275
2008/06/30(月) 01:14:223行目の"落ちる"は例外処理してプロセス終了させる意味ではなくて、
アプリケーションエラー(メモリ参照エラー等)で落ちるの意味。
で、2行目と3行目は大体同じ意味。Windows前提だけど、例外処理を捕捉して
ログ吐かせるのに手間ヒマかけるよりか、自動起動のデバッガのスタックトレースを
追っかけた方が対処が早いし確実。
tryブロック内でnewしたオブジェクトの後片付けは、finallyとかあったら楽なのかも。
>>277
昔、ネストしたクラスで例外処理していた時に、子クラスから親クラスへ順々に
catch (ex) ⇒ throw ex していたら、どこで異常処理になっているのか
さっぱり分からなくなった記憶が…。例外処理のセオリー(デザインパターン?)
みたいなものってあるんでしょか?
0284デフォルトの名無しさん
2008/06/30(月) 01:16:22例外機構事態に問題がある、とかいう話じゃねえよ。
問題があってもきちんとロールバックやリカバリを行って動作し続けなければ
ならないような、間違ってもデータ構造更新中に中途半端な状態で放置
してはならないような種類のプログラムで、例外機構を使って信頼性のあるコードを
書くのが難しいし、そのコードの例外安全性を保障することは、さらに難しいって
話だろ。
勿論、エラーを送出し得る全てのコード(関数呼び出し)を逐一try/catchで囲めば
意味的には例外を使わず全ての関数呼び出しの戻り値をチェックするのと同じだ。
が、そんなことをやるコードは、単に戻り値をチェックしてエラー処理をする
コードよりも汚く冗長で、その上無用なオーバーヘッドを抱えることになる。
つまり、ちっとも嬉しくないだろ。例外使っても。
0285デフォルトの名無しさん
2008/06/30(月) 01:19:12VCのデバッガ場合ハンドルされている例外はブレークしないのがデフォ設定になってる。
デバッガの例外の設定でブレークがかかるようにできる。
0286デフォルトの名無しさん
2008/06/30(月) 01:19:34> 自動起動のデバッガのスタックトレースを
構造化例外を捕捉して起動してますが…
0287デフォルトの名無しさん
2008/06/30(月) 01:20:160288283
2008/06/30(月) 01:50:07知らなかった…orz。ありがとうございます。
>>286
なるほど、構造化例外(SEH)は書籍でしか見たことがなかったもので…。
ありがとうございます。
>>287
すいません、初期化子について良く分かってないんですが、以下のサイトに書いてあることと関連あるんでしょうか?
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200407/04070024.txt
0289デフォルトの名無しさん
2008/06/30(月) 01:57:290290デフォルトの名無しさん
2008/06/30(月) 02:45:06うんうん、これよくわかった。どうもありがとう。
想定エラーケースのうち :
ちまちま細かいリカバー継続処理(数ステップ程度)が求められるケースが多いプログラムの場合
-> 返り血方式の方が書くのが楽
(場合によってはブロックも越えて)どかんと飛ぶようなスキップ・再試行が求められるケースが多いプログラムの場合
-> 例外方式の方が書くのが(相当)楽
ということね。
まあ、みんなもそうだろうけど、ちまちまとどかんの両方あることわかってて、
例外方式だけで統一するか、返り血方式だけで統一するか、設計時に岐路に立たされるよね。
余談だが、実は例外使うのなかなかハードル高いよね。
別の人も書いてたけど、両方式まぜまぜが一番イクナイというか怖い、のだが、
既存ライブラリやAPIは返り血方式をとってるのが多かったりするという第一の壁。
あと例外は拾い損ねが一番恐ろしいわけなのだけど
JAVAのように独占的な1製作者が例外クラスを統一的に設計してくれてればcatchもしやすいんだが、
MSでいえば、標準ライブラリ・MS COMラッパー・MFCなど例外乱立しててぷぎゃー。第二の壁。
デザパタとかでどうにかなる問題なのだろうか。
0291デフォルトの名無しさん
2008/06/30(月) 02:47:24しまった、名前のほうに番号書くべきだったみたいだな
0292デフォルトの名無しさん
2008/06/30(月) 03:12:02例外を送出するかもしれないコードを、
例外使ってないコードから利用するのは難しいからだってさ。
んで、Googleにはすでに例外を使ってないコードがたくさんあるから、
そこから新しいコードを使うことを考えると、例外は使えないと。
スクラッチから始められるなら例外使うかもしれんらしい。
0293デフォルトの名無しさん
2008/06/30(月) 04:56:17リファクタリングする気もないわけですな
0294デフォルトの名無しさん
2008/06/30(月) 05:08:300295259
2008/06/30(月) 07:19:00横着して原文読まずスレだけ読んでたんだが、適切な説明ありがとん。
ビッグネームの言い分に立ち向かうとか、んな大袈裟な話でもなかったわけな。
0296デフォルトの名無しさん
2008/06/30(月) 08:13:170297デフォルトの名無しさん
2008/06/30(月) 08:29:59> 問題があってもきちんとロールバックやリカバリを行って動作し続けなければ
> ならないような、間違ってもデータ構造更新中に中途半端な状態で放置
> してはならないような種類のプログラムで、例外機構を使って信頼性のあるコードを
> 書くのが難しいし、そのコードの例外安全性を保障することは、さらに難しいって
> 話だろ。
これの理由がわからん。なんで信頼性が変わるんだ?
例外安全性の保証についても、戻り値を使う派はエラー安全性の問題を無視して
「ほら簡単でしょ」と言っているだけのような気がする。ほんとに戻り値使ってエラー安全な
コード書いた上で比べてるのか?酷いもんだぞ。
0298デフォルトの名無しさん
2008/06/30(月) 08:32:37プログラムが関与できる原因によって発生した例外とがごちゃ混ぜになってるから信頼性が変わるって話だろ。
0299デフォルトの名無しさん
2008/06/30(月) 08:37:46プログラムが関与できる・できないの区別が具体的にどんなものかわからない。
それもあって当然、それらが混ざってると信頼性が変わる理由がわからない。
もうすこし詳しい説明希望。
0300デフォルトの名無しさん
2008/06/30(月) 08:57:30例外処理の記述が恐ろしいほどシンプルになる。
0301デフォルトの名無しさん
2008/06/30(月) 09:14:38古いコードから新しいコードを使いにくいからか。
変な理由だな。
0302デフォルトの名無しさん
2008/06/30(月) 09:18:17新しいライブラリに置き換えるのは大変なはずだけどなw
0303デフォルトの名無しさん
2008/06/30(月) 13:18:170304デフォルトの名無しさん
2008/06/30(月) 15:23:31例外だとだめで返値ならOKって、んなバカな話はない。
Joelが言ってるのだって、例外を知らないバカ対策でしかない。
0305デフォルトの名無しさん
2008/06/30(月) 17:42:57してるとでも思ってるのかw
少なくともお前よりは優秀な人間しかJoelの周りにはいないだろうよ
0306デフォルトの名無しさん
2008/06/30(月) 18:43:31バカ対策ではない理由を挙げてくれよ。ソース付きで。
0307デフォルトの名無しさん
2008/06/30(月) 19:10:180308デフォルトの名無しさん
2008/06/30(月) 19:11:480309デフォルトの名無しさん
2008/06/30(月) 20:51:49つhttp://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
0310デフォルトの名無しさん
2008/06/30(月) 21:09:262要素のタプルは使用頻度が高い&データ数が数百億単位になる
Google では1要素あたり1バイトでも節約したいとかそんな感じだろうか?
別のエントリで shared_ptr を使おうとかいってんのになあ
0311デフォルトの名無しさん
2008/06/30(月) 21:32:050312デフォルトの名無しさん
2008/06/30(月) 21:51:44こいつだろ。知らない奴なんているのかよ。
http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
これはアプリケーションハンガリアンの説明として有名な文書だが、
例外に関する彼の主張も書いてあるから読んどけ。
0313デフォルトの名無しさん
2008/07/01(火) 00:11:14Googleは社内の馬鹿対策してる会社だよ。
http://labs.google.com/papers/mapreduce.html
> This allows programmers without any experience with parallel and
> distributed systems to easily utilize the resources of a large
> distributed system.
本文や関連資料を読んでいただくとより明確に分かるが、
雇われも含めて社内のプログラマを対象とした話。
0314デフォルトの名無しさん
2008/07/01(火) 00:11:26しかし、悲しいかな彼は英語を読めなかった。
それが、自らの主張を真っ向から否定する証拠そのものだと言うことを、
彼は理解出来なかったのだ。
0315デフォルトの名無しさん
2008/07/01(火) 01:24:05> Joel Spolskyも例外嫌いと言ってたけど
> 大体googleと同じ理由だったな
そもそもジョエル・スポルスキーはそんなこと言ってたのかという
挙げ足取りが過ぎるか。。。
プログラム板ってIDないから、どいつがどいつなのかわかんないのが不便。
0316デフォルトの名無しさん
2008/07/01(火) 06:59:020317デフォルトの名無しさん
2008/07/01(火) 07:02:17ここにエスパーはいませんよ。
0318デフォルトの名無しさん
2008/07/01(火) 07:06:250319デフォルトの名無しさん
2008/07/01(火) 08:07:30エラーの内容すら無いんじゃ答えようも無いな
0320デフォルトの名無しさん
2008/07/01(火) 10:06:260321デフォルトの名無しさん
2008/07/01(火) 10:21:13「このままじゃ全員黙ったままだよ」
っていうのを、急に親切に教えてあげたくなってねw
0322デフォルトの名無しさん
2008/07/01(火) 10:56:09対策が無いなら良いんです。
0323デフォルトの名無しさん
2008/07/01(火) 10:56:18それじゃ、おいらがとっておきと対策を伝授しよう。
諦めろ。
0324デフォルトの名無しさん
2008/07/01(火) 10:58:530325デフォルトの名無しさん
2008/07/01(火) 11:39:16最近>>320みたいな嵐が沸いてるから、酉つけたほうがいいぞ
0326デフォルトの名無しさん
2008/07/03(木) 00:46:240327デフォルトの名無しさん
2008/07/03(木) 10:36:15人間のクズめ。
0328デフォルトの名無しさん
2008/07/04(金) 00:46:570329デフォルトの名無しさん
2008/07/04(金) 18:05:48モノの聞き方を考えてから投稿しろ
0330デフォルトの名無しさん
2008/07/04(金) 21:20:10ttp://booster.x0.to/
0331デフォルトの名無しさん
2008/07/04(金) 23:27:310332デフォルトの名無しさん
2008/07/06(日) 17:18:09専ブラ使って無くてもttp:をリンクに置き換えるアドオンとかあるしね
0333デフォルトの名無しさん
2008/07/11(金) 09:11:29どうして BOOST_PP_SEQ_ELEM_X seq の形を最終的に x, _ にできるのかわかりません。
0334デフォルトの名無しさん
2008/07/12(土) 03:17:02ttp://booster.x0.to/
0335デフォルトの名無しさん
2008/07/12(土) 21:33:24Nagleをオフにしたいのですが、どうやればいいのでしょうか?
0336デフォルトの名無しさん
2008/07/14(月) 11:02:07boost/preprocessor/seq/elem.hpp は見た?
順番に追っていけばいいんじゃないかと。
例えば、X=2 で seq=(x)(y)(z) とすると、
BOOST_PP_SEQ_ELEM_2(x)(y)(z)
BOOST_PP_SEQ_ELEM_1(y)(z)
BOOST_PP_SEQ_ELEM_0(z)
z, BOOST_PP_NIL
のように、X が一つ減るごとに seq が消費されていって、あとは
BOOST_PP_SEQ_ELEM_III(z, BOOST_PP_NIL) → z BOOST_PP_EMPTY()
BOOST_PP_SEQ_ELEM_IV(z BOOST_PP_EMPTY()) → z
という感じかと。
0337デフォルトの名無しさん
2008/07/14(月) 15:14:450338デフォルトの名無しさん
2008/07/14(月) 18:31:49この辺微妙にコンパイラ依存で分岐してるけど、
最終的には (x, _) → x みたいなやつの _ にマッチして捨てられる。
MSVC のやつだと、X=0 なら
BOOST_PP_SEQ_ELEM_III(x, BOOST_PP_NIL(y)(z)) → x
0339デフォルトの名無しさん
2008/07/14(月) 19:10:510340デフォルトの名無しさん
2008/07/17(木) 22:38:110341デフォルトの名無しさん
2008/07/17(木) 22:41:12ublas::vectorで、3次元ベクトルしか代入できない型って作れない?
0342デフォルトの名無しさん
2008/07/18(金) 02:34:44BOOST_USER: Effective UBLAS
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS
めっちゃうろ覚えだけど,固定長のublas::vectorの計算速度を測定したら,2割くらい速かったような・・・?
0343デフォルトの名無しさん
2008/07/18(金) 15:41:21万が一、listが渡されてしまったらコンパイルエラーにならず、危険じゃないですか?
0344デフォルトの名無しさん
2008/07/18(金) 16:06:340345デフォルトの名無しさん
2008/07/18(金) 18:42:59実際やってみるとコンパイルエラーになるよ。
0346デフォルトの名無しさん
2008/07/18(金) 20:47:480347デフォルトの名無しさん
2008/07/18(金) 23:25:54ありがと
0348デフォルトの名無しさん
2008/07/19(土) 00:00:27一体どうやって実装しているんでしょう。
auto_rec.hppというのが謎すぎる。
0349343
2008/07/19(土) 02:06:41どもです。
size関数の実装をみたら、end-beginが0以上かどうかのエラーチェックしかなかったので、listが渡されたら?と思ったのですが、
operator-でエラーが出るのですね。
0350デフォルトの名無しさん
2008/07/19(土) 06:19:59ttp://booster.x0.to/
0351デフォルトの名無しさん
2008/07/19(土) 06:58:460352デフォルトの名無しさん
2008/07/19(土) 12:03:28↓のような動作をしてくれる奴はないかしら
for(int i=0;i<max;++i)
for(int j=i+1;j<max;++j)
func(x[i],x[j]);
0353デフォルトの名無しさん
2008/07/19(土) 12:05:33そんな無駄なコードを使って何をさせたいのか詳しく。
0354デフォルトの名無しさん
2008/07/19(土) 12:59:380355デフォルトの名無しさん
2008/07/19(土) 13:32:510356デフォルトの名無しさん
2008/07/19(土) 15:56:10それともこのやり方ってありえないくらい無駄なの?
0357デフォルトの名無しさん
2008/07/19(土) 16:08:210358デフォルトの名無しさん
2008/07/19(土) 16:22:23>>352は既に自分の欲しい物を>>352で得ていると思うのだが…
0359デフォルトの名無しさん
2008/07/19(土) 17:19:17全域とかのように意味のある範囲指定ならあらかじめループを用意できるだろうけどそれ以外は自分でforを書くのが妥当でしょうね。
その2重のループを用意したいならそのループの意味が必要になると思う。たとえば全組み合わせをループさせるnCmやnPmやnPAImとかあるといいかも。
0360デフォルトの名無しさん
2008/07/19(土) 17:24:23線形代数もろくに知らない人が結構多いんじゃないの?
0361デフォルトの名無しさん
2008/07/21(月) 15:07:36std::vector<std::string> v;
v += "a", "b";
boost::format fmt("%s%s");
std::for_each(v.begin(), v.end(), (boost::ref(fmt) % boost::lambda::_1));
は直感的に正しいようにみえるけどコンパイルが通らない。
\boost\boost_1_35_0\boost\lambda\detail\operator_lambda_func_base.hpp(210) :
error C2664:
'boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>>::return_type_deduction_failure(const boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>> &)' :
1 番目の引数を 'boost::basic_format<Ch>' から 'const boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>> &' に変換できません。
回避策などありませんでしょうか?
環境はVC8です。
0362デフォルトの名無しさん
2008/07/21(月) 15:20:03MAJIDE?
0363デフォルトの名無しさん
2008/07/21(月) 15:22:440364デフォルトの名無しさん
2008/07/21(月) 15:25:51どうやらfor_eachが第三引数の関数の戻り値を求めるので、ラムダ式の戻り値を明示的
に指定せねばならなかったようです。
using namespace boost::assign;
std::vector<std::string> v;
v += "a", "b";
boost::format fmt("%s%s");
std::for_each(v.begin(), v.end(),
boost::lambda::ret<boost::format&>(boost::ref(fmt) % boost::lambda::_1));
それでは。
0365デフォルトの名無しさん
2008/07/22(火) 10:17:25cvector
0366デフォルトの名無しさん
2008/07/22(火) 12:20:39バッファのサイズを指定して実際に読み込んだ数を返す、の様な関数はないんでしょうか?
あるいは、
boost::asio::ip::tcp::iostream s;
//...
s.seekg(0, std::fstream::end);
std::streamsize size = s.tellg(); s.seekg(0);
みたいにしたあとに
s.readをして一気に読み込んでも仕様上正常なんでしょうか?
0367デフォルトの名無しさん
2008/07/22(火) 12:45:41istream に readsome() という関数があるようだが、違うかな?
0368デフォルトの名無しさん
2008/07/22(火) 12:49:29ttp://support.microsoft.com/kb/246934/ja
0369デフォルトの名無しさん
2008/07/22(火) 12:54:000370デフォルトの名無しさん
2008/07/22(火) 12:55:08boost::asio::ip::tcp::iostreamとistream::readsomeは関係があります。
0371デフォルトの名無しさん
2008/07/22(火) 14:34:13asio::streambufへソケットのread_someで読み込んで、
そのstreambufでistreamを構築するって形はどうか?
0372デフォルトの名無しさん
2008/07/22(火) 15:23:07boost::asio使ったこともねえくせのに口を挟むけど
要するに既に読み取り可能なデータがあれば、それだけを読んで返すような、
read(2)のようなセマンティクスで動くようなものが欲しいってこと?
iostreamはブロッキング/バッファリングI/Oのセマンティクスのライブラリだから、
それは無いんじゃねえの?
stdioにもそのような物はないしな(fread()は指定したバイト数に達するまで
いくらブロックしようが何度でもread()して粘るし、fgets()もそうだ)。
逆に言うと、まさにそういう動作が欲しいときにstdioやiostreamを使うわけで、
ネットワークプログラミングでもっと低レベルなものが欲しければ、
そんなもの使わねえだろ。
素直にもっと下の、basic_socketだか何だか知らんが、その辺を叩いたらどうだ。
それと、seekable deviceでもないものをあいてにseek()するのは流石に論外だぞ。
0373デフォルトの名無しさん
2008/07/22(火) 15:38:41> stdioにもそのような物はないしな(fread()は指定したバイト数に達するまで
> いくらブロックしようが何度でもread()して粘るし、fgets()もそうだ)。
つ setvbuf(3)
0374デフォルトの名無しさん
2008/07/22(火) 15:46:00setvbuf()でバッファリングは確かになくせるが、fread()が何度でも
read()しようとすうのはかわらんよ。
while ((n = read(fileno(stdin), buff, sizeof buff)) > 0)
write(fileno(stdout), buff, n);
のようなループは、ttyで動かした場合に、一行入れるたびに一行echo back
してくるだろ。
fread(), fwrite()を使った場合、たとえsetvbuf()で_IONBFにしたところで、
指定したバッファサイズが埋まるまでは読み込みを繰り返そうとするから、
そういう動きにはならないよ。
0375デフォルトの名無しさん
2008/07/22(火) 17:10:25だからバッファリングすると仮定して書かなければならない。
もちろんバッファリングされない可能性も仮定する必要がある。
0376デフォルトの名無しさん
2008/07/22(火) 17:21:35え?streambuf::pubsetbuf()はれっきとした標準でしょ。
ただ、>>374にも書いたけど、バッファリングを切ることと、
istream::read()なりistream::readsome()なりが
Unixのread(2)のような動きをするかどうかは全く別の問題であって、
「read(2)を高々1回しか呼ばない」などという実装依存極まり無いことは
とうぜん仮定できないよな。
istream::read()やfread()に関しては、エラーにならない限りは指定したバイト数を
読もうとするのは*仕様*だから、read(2)とは動きが違うのは当然だ。
istream::readsome()に関しては、どういう動きをするかは、ぶっちゃけ
かなり実装依存なんじゃないか。
VC++2005のは少なくとも壊れてるんだろ?
0377デフォルトの名無しさん
2008/07/22(火) 18:06:26バッファを設定する関数はあるんだけど。CもC++も。
Cの方は「意図」が説明してあるんだけど、
意図に沿うかどうかは処理系定義と明記されている。
つまりバッファリングの意味が定義されてない。
0378デフォルトの名無しさん
2008/07/22(火) 18:16:18なるほど。何食わぬ顔をしてスルーしてもいいってことか?w
そういえば俺が以前試したとき、gccがopen済みのstreamのpubsetbuf()を
平気な顔で無視していたんで、cinやcoutのバッファリング設定を変える方法が
無かった。今はその辺は変わってるんだろうか。
0379デフォルトの名無しさん
2008/07/23(水) 08:04:51ある型を与えると、その型から暗黙変換可能な型のタイプリストを返すメタ関数なんだが
0380デフォルトの名無しさん
2008/07/25(金) 15:58:32また、それが複数ある場合はどういう記法がなされるのでしょうか?
0381デフォルトの名無しさん
2008/07/25(金) 16:11:150382デフォルトの名無しさん
2008/07/25(金) 16:30:06#include <string>
#include <boost/xpressive/xpressive.hpp>
namespace bx = boost::xpressive;
int main()
{
bx::smatch what;
bx::sregex re = bx::sregex::compile("(..)(..)");
std::string s = "foobar";
if (bx::regex_search(s, what, re)) {
std::cout << "$0=" << what[0] << std::endl;
std::cout << "$1=" << what[1] << std::endl;
std::cout << "$2=" << what[2] << std::endl;
}
}
こんなもんじゃねえの
詳しいことはドキュメントに載ってるはずだから、自分で読んどけよ
0383デフォルトの名無しさん
2008/07/25(金) 16:34:470384デフォルトの名無しさん
2008/07/25(金) 17:28:59以前に良く使ってたのは数値計算とメタ制御関係で
ublas
MPL
lambda
bind
accumulator
mult_array
gil
関連しそうなので新しく出て有用そうなlibraryって何かありますでしょうか?
0385デフォルトの名無しさん
2008/07/25(金) 18:21:550386デフォルトの名無しさん
2008/07/25(金) 20:06:330387デフォルトの名無しさん
2008/07/25(金) 20:12:31multi_index
asio(Asynchronous I/O)
iostreams
serialization
0388デフォルトの名無しさん
2008/07/25(金) 21:27:520389デフォルトの名無しさん
2008/07/26(土) 08:40:22ttp://booster.x0.to/
0390デフォルトの名無しさん
2008/07/26(土) 08:46:200391デフォルトの名無しさん
2008/07/26(土) 08:50:13http://www.boostpro.com/products/free
どっちがいい?
0392デフォルトの名無しさん
2008/07/26(土) 08:56:290393デフォルトの名無しさん
2008/07/26(土) 10:48:470394デフォルトの名無しさん
2008/07/26(土) 10:58:490395デフォルトの名無しさん
2008/07/26(土) 11:23:390396デフォルトの名無しさん
2008/07/26(土) 11:56:260397デフォルトの名無しさん
2008/07/26(土) 12:26:270398デフォルトの名無しさん
2008/07/26(土) 14:33:38同じコンパイラ用のバイナリが既に配布されてればそっちを使った方がいい。
0399デフォルトの名無しさん
2008/07/26(土) 14:50:420400デフォルトの名無しさん
2008/07/26(土) 14:55:420401デフォルトの名無しさん
2008/07/26(土) 14:59:320402デフォルトの名無しさん
2008/07/26(土) 15:54:02環境にやさしいプログラマー
0403デフォルトの名無しさん
2008/07/26(土) 16:09:500404デフォルトの名無しさん
2008/07/26(土) 17:38:450405デフォルトの名無しさん
2008/07/26(土) 20:36:55クライアントホスト名を得るにはどうすればいいんでしょうか。
0406デフォルトの名無しさん
2008/07/26(土) 20:39:010407デフォルトの名無しさん
2008/07/26(土) 21:44:160408デフォルトの名無しさん
2008/07/27(日) 10:42:030409デフォルトの名無しさん
2008/08/01(金) 18:46:54httpやftpのサンプルしか見つからないので・・・
0410デフォルトの名無しさん
2008/08/01(金) 19:42:210411デフォルトの名無しさん
2008/08/01(金) 21:59:10Cっぽく書くと下のような感じです。
uint8_t buf[32];
*(uint16_t *)&buf[0] = command;
*(uint16_t *)&buf[2] = len;
*(uint32_t *)&buf[4] = param1;
send(s, buf, 8);
recv(s, buf, 32);
command = *(uint16_t *)&buf[0];
...
boost::asio::streambuf.data()あたりからuint8_t *が取り出せるかと
思ったけど取り出せなかったので適当なサンプルがほしいと思ったわけです。
0412デフォルトの名無しさん
2008/08/01(金) 22:22:52iostream/streambufでバイナリ入出力をやる方法はわかってるの?
0413デフォルトの名無しさん
2008/08/01(金) 22:27:05ttp://booster.x0.to/
0414デフォルトの名無しさん
2008/08/01(金) 22:28:40streambufがあるなら、そこからistream/ostreamを構築して、
istream/ostreamのメンバのread/writeを使ったらどう?
read/writeはstdioでいうところのfread/fwrite相当のバイナリ読み書きのメンバ関数。
たぶん、streambufだとsgetn/sputnがそれにあたるんだと思うんだけど
使ったことないから自信ないんだ、すまん。
0415デフォルトの名無しさん
2008/08/01(金) 22:30:26> streambufだとsgetn/sputnがそれにあたるんだと思うんだけど
それで合ってる。
ただ、void*じゃなくてchar*ベースなので、要reinterpret_cast
iostreamのread()やwrite()も同じだね。
0416デフォルトの名無しさん
2008/08/08(金) 15:54:16VS2008
Boost1.35(インストーラでインストール)
の環境で、Boost::serializeを使ってみようと思ったのですが
#include <boost/serialization/serialization.hpp>
の一行をクラスヘッダに組み込むだけで、
シリアル化のコードを実装しなくても(クラス定義側・ユーザ関数側共)
以下のようなエラーが出てしまいます。
1>c:\program files\boost\boost_1_35_0\boost\serialization\utility.hpp(48)
: error C2143: 構文エラー : ',' が '<' の前にありません。
1> c:\program files\boost\boost_1_35_0\boost\serialization\utility.hpp(50)
: コンパイルされたクラスの テンプレート のインスタンス化
'boost::serialization::is_bitwise_serializable<std::pair<_Ty1,_Ty2>>'
の参照を確認してください
これは何が悪いんでしょうか?
ライブラリの中からエラーを吐かれたので正直途方にくれています。
0417デフォルトの名無しさん
2008/08/08(金) 19:55:12ttp://booster.x0.to/
0418デフォルトの名無しさん
2008/08/08(金) 20:07:46#includeはネームスペースの外だよね?
0419デフォルトの名無しさん
2008/08/09(土) 09:47:30ありがとうございます。
>418
グローバル名前空間でincludeしてます。
ちなみに、 map<int, classOb*> みたいな感じのコンテナで
ポインタの先のオブジェクトの実体まできちんとシリアライズできるかを確かめたかったのですが
ちょっとコード書いてみた限りでは問題無さそうです。
ただ、なんか足元が不安定な気がして怖いですが。
テキスト出力・バイナリ出力はできたけどxmlだとコンパイルエラーを吐くとか。
xml使わないから別にいいけど
0420デフォルトの名無しさん
2008/08/09(土) 20:18:20xmlはmake_nvpに<や>を使うとエラーになるね。そんでテンプレートを派生元にしたときにBOOST_SERIALIZATION_BASE_OBJECT_NVPを使うと思わず引っかかってしまう。
0421デフォルトの名無しさん
2008/08/10(日) 20:38:19http://www.boostpro.com/products/free
で boost_1_35_0 を自動ビルドしたものを Microsoft Visual C++ 2008 に
「インクルードファイル」
「ライブラリファイル」
として登録しています。
で、いろいろとboost関係のポップアップが出るのですが・・・・・・形が違う orz
例:本家のページやboostについていた解説htmlだと「boost::regex」
となっているものが、vcのポップアップだと「boost::RegEx」
また、本家に書いてあるものがポップアップには表示されず、本家の通りに書いて
ビルドすると「そんなものは無い!」と叱られます。
どこをどう間違えたのか・・・。
0422デフォルトの名無しさん
2008/08/10(日) 20:44:50そーすぷりーず
0423デフォルトの名無しさん
2008/08/10(日) 20:52:58あ・・・ソースと言われて気づいたことが。
もしや
#include <boost/regex.h>
と
#include <boost/regex.hpp>
の差?
ソース見たら#include <boost/regex.h>でした。
今、#include <boost/regex.hpp>に変えたらポップアップの中身が変わりました。
・・・・・・・・・・・・・・('A`)小文字のregexがありました。
0424デフォルトの名無しさん
2008/08/10(日) 20:57:35失礼。これは間違い。
「実行可能ファイル」 の登録が原因。
おさわがせしました。
0425デフォルトの名無しさん
2008/08/10(日) 21:05:20冷静に登録の違いと「.hpp」「.h」の違いを一つずついじってみました。
どうも>>423のほうが正解かと。
0426デフォルトの名無しさん
2008/08/10(日) 21:19:35ttp://www.boost.org/doc/libs/1_35_0/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html
他にPOSIX互換APIなんてのもあるね。C++以外からも使えるらしい。
ttp://www.boost.org/doc/libs/1_35_0/libs/regex/doc/html/boost_regex/ref/posix.html
0427デフォルトの名無しさん
2008/08/12(火) 10:41:36マトリックスやベクトルをくクオータニオンで回転する機能ってある?
いま一つ算術系の使い勝手が分からない・・・orz
0428デフォルトの名無しさん
2008/08/12(火) 11:57:17そうでないなら大人しくDirect3DXとか自作のライブラリとか使っとけ。
その辺の所のスタンダードは俺もちょっと欲しいと思っているが、
CPU依存の最適化方法が色々あるからちょっと難しいのかもね。
0429デフォルトの名無しさん
2008/08/12(火) 12:02:330430デフォルトの名無しさん
2008/08/12(火) 12:25:07あんまり環境依存のライブラリ使いたくないんだけどな
レスサンクス
0431デフォルトの名無しさん
2008/08/12(火) 12:41:530432デフォルトの名無しさん
2008/08/12(火) 12:57:200433デフォルトの名無しさん
2008/08/12(火) 12:58:01三次元の回転の処理には非常に便利だが。
0434デフォルトの名無しさん
2008/08/12(火) 13:24:10後3次元ベクトルの回転も
そのくらいの実装だったら自分で出来るかな・・・いや無理ですorz
0435デフォルトの名無しさん
2008/08/12(火) 13:28:44とか
クオータニオンでベクトルを回転
とかググればすぐに見つかるだろw
0436デフォルトの名無しさん
2008/08/12(火) 13:33:510437デフォルトの名無しさん
2008/08/12(火) 13:40:430438デフォルトの名無しさん
2008/08/12(火) 13:41:380439デフォルトの名無しさん
2008/08/12(火) 15:10:000440デフォルトの名無しさん
2008/08/12(火) 20:12:400441デフォルトの名無しさん
2008/08/12(火) 20:20:15boostじゃなくてG3Dとか使えばいいんじゃないの?
0442デフォルトの名無しさん
2008/08/12(火) 21:10:00描画ライブラリごとに違うからな。
もし作るにしても filesystem とか thread みたいになるんじゃね?
0443デフォルトの名無しさん
2008/08/13(水) 09:25:42コンパイルエラーになります
'any::holder<ValueType>::any::holder<ValueType>::held' : クラス、構造体、共用体のメンバは、初期化できません。
0444デフォルトの名無しさん
2008/08/13(水) 09:35:470445デフォルトの名無しさん
2008/08/13(水) 09:36:07>A ValueType is CopyConstructible [20.1.3].
>A ValueType is optionally Assignable [23.1]. The strong exception-safety guarantee is required for all forms of assignment.
まあ、たぶんこのようにするしかないだろ。
class Foo
{
int bar[10] ;
} ;
0446デフォルトの名無しさん
2008/08/13(水) 16:04:52おっしゃるとおりですね。ありがとう。
>>444
boost::arrayで実装しました。ありがとう。
0447デフォルトの名無しさん
2008/08/13(水) 20:41:52ttp://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041&release_id=619445
0448デフォルトの名無しさん
2008/08/13(水) 21:06:46当たりだったみたいだね。
0449デフォルトの名無しさん
2008/08/13(水) 22:05:30こないだ1.35.0入れたばっかだってのに
0450デフォルトの名無しさん
2008/08/13(水) 22:13:400451デフォルトの名無しさん
2008/08/13(水) 22:28:35まだ、ダウンロード数が0だな。
みんなトップからリンクされるの待ってるのかな?
トップからリンクされるまで、のんびりと何が変わったか確認するかな。
0452デフォルトの名無しさん
2008/08/13(水) 22:30:18またビルドするの面倒臭いな。あれ俺の低脳PCだと1時間くらいかかるんだぜ。
0453デフォルトの名無しさん
2008/08/13(水) 22:43:54使うものだけに絞ればその分時間かからないよ。
全部使うわけではないだろ。
0454デフォルトの名無しさん
2008/08/14(木) 01:01:13完全新規はAccumulatorsとExceptionとUnitsくらいか?
Unitsはテンプレートの使われ方としては目新しいものじゃないが、Boostに入ったことできっと流行る。
0455デフォルトの名無しさん
2008/08/14(木) 08:29:390456デフォルトの名無しさん
2008/08/14(木) 09:35:32他は知らん
0457デフォルトの名無しさん
2008/08/14(木) 09:46:04boost::systemとかboost::filesystemとかasioとかシリアライゼーションとかはライブラリのコンパイルが必要。
また「boost::filesystemはboost::systemを利用する」みたいな依存関係がある場合があるので、
ライブラリは全部コンパイルしとけばおk
0458デフォルトの名無しさん
2008/08/14(木) 10:05:260459デフォルトの名無しさん
2008/08/14(木) 11:41:100460デフォルトの名無しさん
2008/08/14(木) 11:51:42http://www.boostpro.com/products/free
があるし。
最近は自分でビルドしなくていいようになってきた。
0461デフォルトの名無しさん
2008/08/14(木) 12:02:050462デフォルトの名無しさん
2008/08/14(木) 12:52:010463デフォルトの名無しさん
2008/08/14(木) 13:41:150464デフォルトの名無しさん
2008/08/14(木) 19:15:15ttp://beta.boost.org/users/news/version_1_36_0
0465デフォルトの名無しさん
2008/08/14(木) 21:49:34boost::exceptionはなかなか面白いよ。
例外をcatch-throwで受け流す途中で情報を追加していくことができる。
0466デフォルトの名無しさん
2008/08/14(木) 23:04:19マルチスレッドは鬼門だな
0467デフォルトの名無しさん
2008/08/15(金) 00:52:340468デフォルトの名無しさん
2008/08/15(金) 06:16:250469デフォルトの名無しさん
2008/08/15(金) 17:15:41どうやったら10分以下で終わるんだ?
0470デフォルトの名無しさん
2008/08/15(金) 17:20:550471デフォルトの名無しさん
2008/08/15(金) 18:57:07ttp://booster.x0.to/
>>469
もしかしたら私と同じトラブルかもしれませんので、>>108以降を参照して頂ければ。
0472デフォルトの名無しさん
2008/08/15(金) 20:53:09ハッシュコンテナ!ヤッター
0473デフォルトの名無しさん
2008/08/15(金) 21:01:06boost/sandbox/に見つけましました。ありがとう
boostって何でもあるね
0474デフォルトの名無しさん
2008/08/16(土) 19:57:410475デフォルトの名無しさん
2008/08/16(土) 20:46:50安心しろ。
BoostのUnordered associative containersの実装はとても速い。
Dinkumwareとは比べ物にならん。
0476デフォルトの名無しさん
2008/08/16(土) 21:17:200477デフォルトの名無しさん
2008/08/16(土) 21:22:11TR1のドラフトぐらい読んでこいよ
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf
0478デフォルトの名無しさん
2008/08/17(日) 02:01:29ttp://codezine.jp/a/article/aid/2171.aspx?p=2
0479デフォルトの名無しさん
2008/08/19(火) 08:57:040480デフォルトの名無しさん
2008/08/19(火) 08:59:07大文字嫌い。
0481デフォルトの名無しさん
2008/08/19(火) 09:01:26C++の前に日本語使えるようになろうな。
0482デフォルトの名無しさん
2008/08/19(火) 10:56:30>>479でも別に正しいだろ。
>>481は自分を中心に世界が回っていると思っている馬鹿。
0483デフォルトの名無しさん
2008/08/19(火) 11:10:17いちいち上げ足とる奴もどうかと思うな
0484デフォルトの名無しさん
2008/08/19(火) 11:28:16という意味でしょ?
tr1ってのがどの実装のことを指しているかにもよると思うけど。
0485デフォルトの名無しさん
2008/08/19(火) 12:06:20boostとTR1の両方「に」存在するライブラリ
と書くつもりだったんだ。
すまんね
0486デフォルトの名無しさん
2008/08/19(火) 12:06:44なら問題ない
0487デフォルトの名無しさん
2008/08/19(火) 12:11:010488デフォルトの名無しさん
2008/08/19(火) 12:45:410489デフォルトの名無しさん
2008/08/19(火) 13:50:35boostのほうが完全に公式でないが明確に拡張ライブラリを入れてる感があってスッキリする。
表現しにくいが何となくそんなイメージ
0490デフォルトの名無しさん
2008/08/19(火) 14:21:070491デフォルトの名無しさん
2008/08/19(火) 18:08:380492デフォルトの名無しさん
2008/08/19(火) 18:24:150493デフォルトの名無しさん
2008/08/19(火) 21:32:33いずれstd空間に入らないのかな
0494デフォルトの名無しさん
2008/08/20(水) 02:51:55けど俺は階層にして欲しい。
stdに入るものが、C++XXのXX違いで変るのはやめて欲しい。
0495デフォルトの名無しさん
2008/08/20(水) 08:43:41前のコードがそのままだとコンパイル通らなかった
0496デフォルトの名無しさん
2008/08/20(水) 19:38:05471さんのリンク先のbuild.txtの手順でビルドしたのですが、
ランタイムがスタティックリンクの場合のlib(例:libboost_filesystem-vc90-mt-sgd-1_36.lib)が作成されません。
他のライブラリの都合上、ランタイムをスタティックリンクにする必要があります。
どうすれば作成できるでしょうか。
以下のbjamの設定だと思うのですが、どうしたらいいか分かりませんでしたorz
bjam --toolset=msvc -a link=static,shared threading=multi release debug stage
0497デフォルトの名無しさん
2008/08/20(水) 20:09:050499496
2008/08/21(木) 07:21:42runtime-link=static
でした。うまくいきました。ありがとうございました。
0500デフォルトの名無しさん
2008/08/22(金) 18:08:11ttp://booster.x0.to/
>>496
申し訳ございません。staticも作れていたと勘違いしておりました。
VSやSDKの情報も含めてbuild.txtも更新致しました。
そしてビルド時間が2倍に・・・。
0501496
2008/08/22(金) 20:35:290502デフォルトの名無しさん
2008/08/23(土) 12:26:360503デフォルトの名無しさん
2008/08/23(土) 12:40:050504デフォルトの名無しさん
2008/08/23(土) 15:13:34ダメ。
どうもヘッダ組み込んだだけでその後全部死ぬっぽい?
どのヘッダが問題なのかまでは調べてないが。
あと新しく増えたunorderedもオブジェクト宣言したとこから死ぬ。
1.35に戻してtr1のunorderedを使うことにします・・・
0505デフォルトの名無しさん
2008/08/23(土) 15:34:16boostを一番にインクルードしてるけどね
0506デフォルトの名無しさん
2008/08/23(土) 16:49:49インテリセンスが壊れたことは無いぞ。
0507デフォルトの名無しさん
2008/08/23(土) 17:41:28C++/CLIと併用してない?
0508デフォルトの名無しさん
2008/08/23(土) 21:03:14そうなの?ウチだけなの?
あとunorderedは1.35にぶち込んで使ってみたので、そのせいかもしれない。
でもtr1のunoderedの方がVCのデバッガとも相性は良いね。
普通の配列と同じように表示されるし。
>>507
してません
0509デフォルトの名無しさん
2008/08/23(土) 21:17:300510デフォルトの名無しさん
2008/08/23(土) 21:26:530511デフォルトの名無しさん
2008/08/24(日) 14:57:06セミコロンにしたいんだが。
BOOST_PP_LIST_FOR_EACH だと、
a;b;c;d;
みたいに最後にもセミコロンが付いてしまう。
0512デフォルトの名無しさん
2008/08/24(日) 15:12:25http://svn.boost.org/trac/boost/browser/trunk/boost/preprocessor/list/enum.hpp
に実装があるからそれを真似すればいい
たった二行で済む簡単な定義
0513デフォルトの名無しさん
2008/08/24(日) 15:15:49いまさらだが
マクロ展開後の再スキャン中は、そのマクロの展開が禁止されるので、
それを利用して「自分があるマクロから(間接的に)呼ばれたかどうか」が判定できる
0514デフォルトの名無しさん
2008/08/24(日) 16:08:17プリコンパイルヘッダがきかねー
0515デフォルトの名無しさん
2008/08/24(日) 16:10:410516デフォルトの名無しさん
2008/08/24(日) 16:35:49ありがと
0517デフォルトの名無しさん
2008/08/24(日) 16:48:26vectorより多くなるが、mapやsetよりはポインタの分少なくなるっぽい?
0518デフォルトの名無しさん
2008/08/24(日) 17:10:150519デフォルトの名無しさん
2008/08/24(日) 17:17:200520デフォルトの名無しさん
2008/08/28(木) 21:59:340521デフォルトの名無しさん
2008/08/29(金) 11:25:40ctypes使ったほうが安心なのかな
0522デフォルトの名無しさん
2008/08/29(金) 11:31:54利用者が多ければ、誰かが維持してくれるんじゃないのかな。
0523デフォルトの名無しさん
2008/08/29(金) 15:59:270524デフォルトの名無しさん
2008/08/29(金) 18:41:04ttp://booster.x0.to/
0525デフォルトの名無しさん
2008/08/30(土) 14:24:350526デフォルトの名無しさん
2008/08/30(土) 19:45:50なっちゃうなあ。ソース直せばいけるっぽいけど・・1.35使ってた方が無難?
0527デフォルトの名無しさん
2008/08/31(日) 20:52:490528デフォルトの名無しさん
2008/08/31(日) 22:25:49少なくともbasenameはconvenience.hppにある
0529デフォルトの名無しさん
2008/09/01(月) 04:23:02ありがとう!
でも dirname がないなぁ。basename も basename じゃなくて、
拡張子抜きファイル名の意味みたいだし。ふーむ。
ttp://www.boost.org/doc/libs/1_36_0/libs/filesystem/doc/reference.html
0530527
2008/09/01(月) 04:30:22dirname は branch_path().native_file_string() みたいな?
うーん、、、、なんだろうこのセンス。branch_path、、、なにを意味したいのか・・・・
とにかくありがと!
0531デフォルトの名無しさん
2008/09/01(月) 21:25:04という常識から疑うんだ
世の中は広い
0532デフォルトの名無しさん
2008/09/01(月) 22:37:300533デフォルトの名無しさん
2008/09/02(火) 00:32:41ttp://svn.boost.org/trac/boost/wiki/ReleasePractices/HotFixes
0534デフォルトの名無しさん
2008/09/02(火) 12:37:52VCの機能の「宣言へ移動」をやっても見つからないし、boostフォルダをGREPで検索しても見つかりません。
どういうこと?
0535デフォルトの名無しさん
2008/09/02(火) 12:46:270536デフォルトの名無しさん
2008/09/02(火) 13:31:520537デフォルトの名無しさん
2008/09/02(火) 13:39:050538デフォルトの名無しさん
2008/09/05(金) 11:29:09うーん、さっぱりわからない。
実装方法が分からなくても、BOOST_PP_REPEAT自体を使うのは簡単だからいいか。
0539デフォルトの名無しさん
2008/09/05(金) 21:53:45ttp://booster.x0.to/
今回のビルドから、svn管理用ファイルを完全に取り除く様にしました。
0540デフォルトの名無しさん
2008/09/12(金) 18:42:56ttp://booster.x0.to/
0541デフォルトの名無しさん
2008/09/12(金) 22:19:40最新版ちゃんとビルドできましたよ。 なんか同じファイルが2つずつ入ってます。
あとマルチスレッド用のスタティックライブラリだけあれば十分ではないですか?
シングルスレッドで動かしても、使えるので。性能に多少違いがあるのかもしれないですが。
別々に分けてうpしてあれば各自で選べますけど。
0542デフォルトの名無しさん
2008/09/12(金) 22:31:290543デフォルトの名無しさん
2008/09/13(土) 00:00:12http://ponyo.no-ip.org/uploader/src/10P0186.zip
0544デフォルトの名無しさん
2008/09/13(土) 00:30:38再圧縮したら28Mで済みましたよ。 デバッグ用のLIBが21M食ってて重いです。
0545デフォルトの名無しさん
2008/09/13(土) 00:43:500546デフォルトの名無しさん
2008/09/13(土) 01:02:26boost...-mt.lib・・・ダイナミックリンク、リリース用、バージョンタグ無し
boost...-mt-1_37.lib・・・ダイナミックリンク、リリース用、バージョンタグ付
boost...-mt-1_37.dll・・・リリース用、ダイナミックリンク用ライブラリ
boost...-mt-gd.lib・・・ダイナミックリンク、デバッグ用、バージョンタグ無し
boost...-mt-gd-1.37.lib・・・ダイナミックリンク、デバッグ用、バージョンタグ付
boost...-mt-gd-1_37.dll・・・デバッグ用、ダイナミックリンク用ライブラリ
libboost...-mt.lib・・・スタティックリンク?、リリース用、バージョンタグ無し
libboost...-mt-1_37.lib・・・スタティックリンク?、リリース用、バージョンタグ付
libboost...-mt-s.lib・・・スタティックリンク、リリース用、バージョンタグ無し
libboost...-mt-s-1_37.lib・・・スタティックリンク、リリース用、バージョンタグ付
libboost...-mt-gd.lib・・・スタティックリンク?、デバッグ用、バージョンタグ無し
libboost...-mt-gd-1_37.lib・・・スタティックリンク?、デバッグ用、バージョンタグ付
libboost...-mt-sgd.lib・・・スタティックリンク、デバッグ用、バージョンタグ無し
libboost...-mt-sgd-1_37.lib・・・スタティックリンク、デバッグ用、バージョンタグ付
となっております。
この内boost...-mt.libとboost...-mt-1_37.lib、boost...-mt-gd.libとboost...-mt-gd-1.37.lib、
libboost...-mt.libとlibboost...-mt-1_37.lib、libboost...-mt-gd.libとlibboost...-mt-gd-1_37.libは
それぞれファイル名が違うだけでバイナリは同一です。
libboost...-mt...とlibboost...-mt-s...の違いについては良く分かりません。
バイナリは各々違っており両者共スタティック用サイズなのですが、命名規則の頁
ttp://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming
を見るとスタティック用には-sが付く事になっており、libboost...-mt...が何用なのか分かりません。
0547デフォルトの名無しさん
2008/09/13(土) 01:03:23ビルドはマルチスレッドのフルセット
bjam --toolset=msvc -a runtime-link=static,shared threading=multi release debug stage
で行い、出来上がったもの+ヘッダを全てrarにパックしております。
とりあえずは良く分からないままあれこれ削除するよりは、全部入りで提供して
使われる方の方で削って貰うのが良いと考えておりますが、明らかに不要な物があれば教えて頂けましたら対応致します。
0548デフォルトの名無しさん
2008/09/13(土) 01:14:13http://www.boostpro.com/products/free
でそのインストーラーと実際にインストールされるファイルを比較すると
-sがつくのがシングルスレッド用で、-gdがデバッグ用みたいです。
バージョンタグ無しと、バージョンタグ有りは、完全に同一ファイルであって
ヘッダから呼び出されるのはタグ有りの方だけです。
0549デフォルトの名無しさん
2008/09/13(土) 01:22:31確実なことは、バージョン付きと付いていないやつは、バイナリレベルで完全に一致しています。
あと、バージョン付いてない方を読ませても読み込まないです。
0550デフォルトの名無しさん
2008/09/13(土) 01:28:12でも、>>546を見ると別のことが書いてあるし判らないです。
0551デフォルトの名無しさん
2008/09/13(土) 01:34:47-sが付いているのは、CRTに静的リンク(libcmt.lib使用)で、
ないほうは、CRTに動的リンク(msvcrXX.lib/msvcrXX.dll使用)だったはず。
-gdと-sgdはもちろんデバッグ版のCRT (libcmtd.libとmsvcrXXd.*)を使う。
0552デフォルトの名無しさん
2008/09/13(土) 01:46:39すみません。現状維持がいいみたいです。
0553デフォルトの名無しさん
2008/09/13(土) 01:56:25NTFS上ならハードリンクか何かにできれば理想的だよね。
0554デフォルトの名無しさん
2008/09/13(土) 02:47:37誤 boost...-mt-gd-1.37.lib・・・ダイナミックリンク、デバッグ用、バージョンタグ付
正 boost...-mt-gd-1_37.lib・・・ダイナミックリンク、デバッグ用、バージョンタグ付
誤 この内boost...-mt.libとboost...-mt-1_37.lib、boost...-mt-gd.libとboost...-mt-gd-1.37.lib、
libboost...-mt.libとlibboost...-mt-1_37.lib、libboost...-mt-gd.libとlibboost...-mt-gd-1_37.libは
それぞれファイル名が違うだけでバイナリは同一です。
正 この内boost...-mt.libとboost...-mt-1_37.lib、boost...-mt-gd.libとboost...-mt-gd-1_37.lib、
libboost...-mt.libとlibboost...-mt-1_37.lib、libboost...-mt-gd.libとlibboost...-mt-gd-1_37.lib、
libboost...-mt-s.libとboost...-mt-s-1_37.lib、boost...-mt-sgd.libとlibboost...-mt-sgd-1_37.libは
それぞれファイル名が違うだけでバイナリは同一です。
追加
>>545
Turbo C++ Explorerで良いのであれば検討しますが、一寸手が回らないかもしれません。
>>548-550
オフィシャル
ttp://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming
によると-mtが付けばマルチスレッド用で-sはスタティック用という事になっておりますので良く分からないですね・・・
一応全てのファイルに-mtが付いておりますので、命名規則を信じるならシングル用は混じっていない筈です。
>>551-552
成程、確かにboostのダイナミック/スタティックとC++のそれは別要素ですね。
とりあえずこのままでいきます。
>>553
コンパイル絡みで問題が出ないなら、ハードリンクでかなりファイルサイズを圧縮出来そうですね。
ハードリンクは全く使った事が無いのでこれから使い方を調べなければなりませんが、
間に合えば次回か次々回辺りのビルドで採用してみます。
0555デフォルトの名無しさん
2008/09/13(土) 03:52:520556デフォルトの名無しさん
2008/09/13(土) 03:59:010557デフォルトの名無しさん
2008/09/13(土) 10:39:030558デフォルトの名無しさん
2008/09/13(土) 13:13:050559デフォルトの名無しさん
2008/09/13(土) 15:48:21解凍後、最後に起動させれば配布サイズが小さくなると思う。
0560デフォルトの名無しさん
2008/09/14(日) 02:51:25ありがとう
ございます
0561デフォルトの名無しさん
2008/09/14(日) 08:11:320562デフォルトの名無しさん
2008/09/15(月) 12:52:41boost.eggってどこにあるの?
0563デフォルトの名無しさん
2008/09/15(月) 13:14:050564デフォルトの名無しさん
2008/09/16(火) 00:52:09[9], boost::regex&, const char [8])’
とは何?g++とboost1.36
該当する部分のソース:
1 #include <iostream>
2 #include <string>
3 #include <boost/regex.hpp>
4
5 using namespace std;
(略)
25 int main()
26 {
27 boost::regex comp("t");
28 string res;
29 res = boost::regex_replace("testeee2",comp,"abeeeec");
30 cout << res <<endl;
31 return(1);
32 }
0565デフォルトの名無しさん
2008/09/16(火) 01:58:210566デフォルトの名無しさん
2008/09/16(火) 02:01:010567デフォルトの名無しさん
2008/09/16(火) 17:25:290568デフォルトの名無しさん
2008/09/16(火) 20:14:460569デフォルトの名無しさん
2008/09/16(火) 20:33:50でも大丈夫少なくともrubyやelispよりは効率良いと思うよ
0570デフォルトの名無しさん
2008/09/16(火) 22:53:330571デフォルトの名無しさん
2008/09/16(火) 23:15:110572デフォルトの名無しさん
2008/09/16(火) 23:24:55現在boost::asioを使って遊んでいます。
で、せっかくなのでip::tcp::streamでクライアント - サーバー間の通信ものを作ったんですが、
このストリームに対してタイムアウト値の設定ってできないものでしょうか。
socketに対してならハンドラでフツーに定義できましたが、
streamを使用してみたいなぁと思いまして。
0573デフォルトの名無しさん
2008/09/17(水) 04:18:31Graph Libraryの並列処理版があると聞いて
インストールを試みましたが挫折しています…
OS:WindowsVista,コンパイラ:Visual Studio 2005
1. Parallel Boost Graph Library http://www.osl.iu.edu/research/pbgl/
をsvnでとってくる
2. Cmake2.6.1をとってくる http://www.cmake.org/cmake/resources/software.html
3. MPICH2をとってくる http://www.mcs.anl.gov/research/projects/mpich2/
MPICH2のインストールはここを参考にしました http://ums.futene.net/wiki/Paralell/4D5049434832206F6E2057696E646F7773204C6F63616C.html
でcmakeを使いconfigure
cmake . すると
the following Boost libraries could not be found:
boost_mpi
とでます…
boostのインストールはboost consultingを使いました http://www.boostpro.com/
これはboostのビルドが必要ということでしょうか…
またboost1.36のビルドを試みてみますが
MPIが見つからないとなじられています
boost_mpiのインストールに詳しいサイトあったら教えてくだされ…
つかれたよーママン!
0574デフォルトの名無しさん
2008/09/17(水) 04:52:55そりゃBoost公式サイトと、各MPI実装の公式サイトに決まっているだろ。
試すならBoostでテストされているとドキュメントに記されている三つから選べばいいだろ。
0575デフォルトの名無しさん
2008/09/19(金) 00:44:28ublasとnumpyを混ぜて使うメリットが今一歩分からない
0576デフォルトの名無しさん
2008/09/19(金) 10:06:42生成したデータをublasのプログラムに流し込む
結果をさらにnumpyでplot
0577デフォルトの名無しさん
2008/09/20(土) 05:04:24ttp://booster.x0.to/
バージョンタグ無しライブラリをユーザー側で作成する様に変更する事により、ファイル容量を削減致しました。
バッチファイルを2種類同梱しており、実体を作成するかハードリンクを作成するかお好きな方をお選び頂けます。
0578デフォルトの名無しさん
2008/09/20(土) 10:17:440579575
2008/09/20(土) 11:18:07なるほど! plotやらにpython使うのは確かに便利だ
pyublasでリンクする手間が凄く小さいならだけど
試してみるかな
レスサンクス!
0580デフォルトの名無しさん
2008/09/22(月) 16:36:41MPIならとりあえずmpichでぐぐれ
ただ、MPIは並列処理といってもコアレベルの並列性ではなくて
クラスタとかのPCレベルの並列性を利用するライブラリだよ
0581デフォルトの名無しさん
2008/09/24(水) 04:22:25乙。
最近みつけたソフトですがZipファイルをマウント出来るソフトがあります。
これを使うと、解凍せずにboostライブラリをコンパイルできます。
最新版のRarをZipに再圧縮したところ126Mになりましたが
これだと展開する手間が無く便利です。
0582デフォルトの名無しさん
2008/09/24(水) 04:24:10Zipファイルをマウントする?「Pismo File Mount Audit Package」
http://www.moongift.jp/2008/07/pismo_file_mount_audit_package/
0583デフォルトの名無しさん
2008/09/24(水) 12:16:12クラスAの参照を保持するクラスBがあり
クラスBの->演算子でクラスAのポインタを返す場合
B b;
b->test();
は可能なんですが
このクラスをshared_ptrに入れて
shared_ptr<B> c(b);としたらもちろんc->test()は通りません
それを通るようにしたいのですが、クラスA又はBに工夫をして何とか通るようにならないでしょうか
shared_ptrみたいなクラスを自作しないと無理ですかね
なんかboostと関係ない気がしてきた
0584デフォルトの名無しさん
2008/09/24(水) 12:24:140585デフォルトの名無しさん
2008/09/24(水) 12:25:38>b->test();
クラスAの参照はどうやって保持してるの?意味が分からない。
0586デフォルトの名無しさん
2008/09/24(水) 12:31:32getでも結局帰ってくるのはBのポインタなので無理でした^^;
クラスBのコンストラクタでクラスAをnewしてメンバ変数で保持してます
0587デフォルトの名無しさん
2008/09/24(水) 12:38:31その実体はAのtestを呼ぶだけ
0588デフォルトの名無しさん
2008/09/24(水) 12:41:19最初はそれでやるつもりだったんですが、メッソドや実装したいクラスの数が多かったので
もっと効率のいいやり方がないかと悩んでいました
しかし、やっぱどうあがいても帰ってくるのはポインタなので無理そうですね^^;
shared_ptrをコピーして->演算子などが参照を返すようにするか
諦めて(*c)->test()と書くことになりそうです…
0589デフォルトの名無しさん
2008/09/24(水) 16:19:44それの何が気に入らないんだ?
0590デフォルトの名無しさん
2008/09/24(水) 17:06:55shared_ptr<B>にBと同じ振る舞いを期待するのは、そもそもおかしい気がする。
0591デフォルトの名無しさん
2008/09/24(水) 20:01:540592デフォルトの名無しさん
2008/09/24(水) 23:47:50諦めるも何も、shared_ptrはポインタと同等の振る舞いなんだから
例え B* c = new B(); と書いたって、(*c)->test()
何かアロー演算子をオーバーロードしたせいで、混同している気がする。
0593デフォルトの名無しさん
2008/09/26(金) 16:25:21ublas::matrix[-5][-3]
とか
boostに、これができそうなのありますか?
0594デフォルトの名無しさん
2008/09/26(金) 16:27:460595デフォルトの名無しさん
2008/09/26(金) 22:16:10ttp://booster.x0.to/
0596デフォルトの名無しさん
2008/09/27(土) 11:54:13hoge2ならchoge2
hoge3ならchoge3
...
それ以外ならchogen
って型を作るにはどうしたら良いでしょうか?
つまり次のようにしたいです
hoge<T>::type // T が hoge1 なら type が choge1,hoge2 なら hoge2, ... それ以外なら chogen
0597デフォルトの名無しさん
2008/09/27(土) 13:35:080598デフォルトの名無しさん
2008/09/27(土) 13:36:48template<> struct hoge<hoge1>{ typedef choge1 type; };
template<> struct hoge<hoge2>{ typedef choge2 type; };
...
0599デフォルトの名無しさん
2008/09/27(土) 14:51:24>>596をboost::mplで書いてやろうと思ったのにorz
using namespace boost::mpl;
typedef map<
pair<hoge1, choge1>,
pair<hoge2, choge2>
> hoge_map;
template<typename T> struct hoge : at<hoge_map,T /***,chogen***/> {};
0600デフォルトの名無しさん
2008/09/27(土) 15:07:140601デフォルトの名無しさん
2008/09/27(土) 16:13:10なんでatが使えないんだろうね。
namespace mpl = boost::mpl;
template<typename T> class hoge
{
typedef mpl::map<mpl::pair<hoge1, choge1>,
mpl::pair<hoge2, choge2>,
mpl::pair<hoge3, choge3> > type_map;
public:
typedef typename mpl::eval_if<mpl::has_key<type_map, T>,
mpl::at<type_map, T>,
mpl::identity<chogen> >::type type;
};
0602デフォルトの名無しさん
2008/09/27(土) 21:07:060603デフォルトの名無しさん
2008/09/27(土) 21:11:550604デフォルトの名無しさん
2008/09/27(土) 21:46:05でも、そこまで増えるとしたらアプローチが変わってくるんだろうけど
分かりやすさの点ではmplも特殊化も大して変わらんように思える
0605デフォルトの名無しさん
2008/09/28(日) 11:31:11hage2ならchage2
hage3ならchage3
...
それ以外ならasuka
って型を作るならどうか?
0606デフォルトの名無しさん
2008/09/28(日) 11:32:11特殊化で十分書けるし
0607デフォルトの名無しさん
2008/09/28(日) 11:43:45コンパイル時間をはかった訳じゃないけど、mpl使うのがコンパイラに優しいとは思えないw
0608デフォルトの名無しさん
2008/09/28(日) 12:50:33コンパイルを通す方法を教えてください。
0609デフォルトの名無しさん
2008/09/28(日) 12:57:41そのまま貼り付けて
出来ればソースも
0610デフォルトの名無しさん
2008/09/28(日) 12:58:53100以上あるので貼り付ける事は出来ません。
0611デフォルトの名無しさん
2008/09/28(日) 13:08:50テンプレートは何行もにも分かれてるからその1ブロックだ。
0612デフォルトの名無しさん
2008/09/28(日) 13:10:260613デフォルトの名無しさん
2008/09/28(日) 13:12:09できればこのエラーがでる最小のソース
0614デフォルトの名無しさん
2008/09/28(日) 13:13:08int main(){
return 0;
}
0615デフォルトの名無しさん
2008/09/28(日) 13:24:440616デフォルトの名無しさん
2008/09/28(日) 13:27:12>memory and other headers use the macro _IF_CHK.
>This macro IS defined in [...]\crt\src\xutility,
>but IS NOT defined in [...]\include\xutility.
>Thus, it is (e.g.) impossible to compile with <vector> (among others)
>
>Workaround: copy [...]\crt\src\xutility to [...]\include\xutility.
0617デフォルトの名無しさん
2008/09/28(日) 13:31:26動くようになりました。
0618デフォルトの名無しさん
2008/10/01(水) 08:46:01ostreamがない
とかいうエラー出る
0619デフォルトの名無しさん
2008/10/02(木) 20:48:36http://www.boostpro.com/products/free
0620デフォルトの名無しさん
2008/10/02(木) 21:15:12> 更新しました。
> ttp://booster.x0.to/
0621デフォルトの名無しさん
2008/10/02(木) 22:20:140622デフォルトの名無しさん
2008/10/02(木) 22:58:26boostぐらい自分で作れよ。
0623デフォルトの名無しさん
2008/10/02(木) 22:59:370624デフォルトの名無しさん
2008/10/03(金) 00:23:42最新版とは言っても正式版じゃないのは嫌な人も多いだろう
0625デフォルトの名無しさん
2008/10/03(金) 00:58:53C++の標準規格になるまでは正式ではないのでは?
0626デフォルトの名無しさん
2008/10/03(金) 03:15:400627デフォルトの名無しさん
2008/10/03(金) 07:41:50知りもしないことに口出すなよ
0628デフォルトの名無しさん
2008/10/03(金) 11:52:41「でしょ?」とか「では?」って書いてるんだから、事実の話ではなく、不確かな知識の
確認がしたいんだってのはわかるから、別に混乱も起きないし。
君が美化委員を気取る必要は無いよ。
0629デフォルトの名無しさん
2008/10/03(金) 12:24:050630デフォルトの名無しさん
2008/10/03(金) 12:29:140631デフォルトの名無しさん
2008/10/03(金) 12:50:10要は自分を言い負かす奴は全員キモイんですよねw
0632デフォルトの名無しさん
2008/10/03(金) 20:10:15ttp://booster.x0.to/
私のビルドはビルド時点での最新のSVNを使った開発速報版ですので、安定版とは位置付けが異なります。
通常は安定版を、開発状況を確かめたい場合や最新のSVNにしか無い機能を使ってみたい場合は速報版をといった風に
使い分けるのが良いのではないかと思います。
0633デフォルトの名無しさん
2008/10/04(土) 16:46:59ttp://www.pej-hed.jp/washo/2590.html
「Beyond the C++ Standard Library: An Introduction to Boost」
ttp://www.informit.com/store/product.aspx?isbn=0321133544
の和訳で、内容はどうやら1.32準拠らしい
Boostの応用の本は欲しかったけど、やや物足りなさを感じるな
0634デフォルトの名無しさん
2008/10/04(土) 18:08:36C++使いすら集まらないのにBoost使うやつなんて絶対集まらない気がするんだが
0635デフォルトの名無しさん
2008/10/04(土) 18:34:26食わず嫌いと同じ
boostはプログラムの難易度を下げるために開発されてるんだよ
OSに依存しない統一したコードを短く書くためのもの
0636デフォルトの名無しさん
2008/10/04(土) 18:44:11コンピュータがまさしくそれですな。
0637デフォルトの名無しさん
2008/10/04(土) 18:48:04そんなに難しくない。 以前からあるwindowsプログラム、DirectXを使う方が断然困難とおもうんだが
0638デフォルトの名無しさん
2008/10/04(土) 18:55:07Boostには現在、GUIやグラフィック描画のライブラリがないので比較しようがないと思うんだが。
0639デフォルトの名無しさん
2008/10/04(土) 19:00:52いざ使う事になって、使えなせないのはヘボだって事だな。
比較は出来る。
0から初めて習得に掛かる時間を比べたらDirectXのほうが断然上(難易度高い)。
0640デフォルトの名無しさん
2008/10/04(土) 19:09:02じゃあスワヒリ語とC++の難易度の差も、習得時間というモノサシだけで、同様に比較できるわけか?
0641デフォルトの名無しさん
2008/10/04(土) 19:15:340642デフォルトの名無しさん
2008/10/04(土) 19:38:28使用可能なヘッダを指定すればいいんじゃないか。
0643デフォルトの名無しさん
2008/10/04(土) 19:44:110644デフォルトの名無しさん
2008/10/04(土) 19:48:430645デフォルトの名無しさん
2008/10/04(土) 20:04:50何しろevalがあるんだから。
0646デフォルトの名無しさん
2008/10/04(土) 20:07:12なかなかカオスだぞアレは
0647デフォルトの名無しさん
2008/10/04(土) 20:30:22揚げ足もあんまり必死に取りに行くと、ただ本人がバカに見えるだけでジ・エンドだよ。
相手をバカに見せたくて必死な君としては、これ大問題じゃないの?
興奮のあまり、いつの間にか「だけで」とか新条件加えちゃってるし。
0648デフォルトの名無しさん
2008/10/04(土) 20:37:49しかし、現に>>639は「習得に掛かる時間」だけしか「比べ」てないぜ。
0649デフォルトの名無しさん
2008/10/04(土) 20:47:47>>638を受けた上で、「それでも比較できる項目はあるぞ」って言ってるんだろ。
それが唐突に「言語は習得時間というモノサシだけで比較できる」と言ってるかのように曲がってる。
0650デフォルトの名無しさん
2008/10/04(土) 20:57:57各種ビルドツールの悪い所を寄せあつめたかのような最強の糞makeツールだと思うんですが
何でboostではあれが標準なの?ユーザーであんなの使ってる人いるの?
rakeとかSConsで一瞬でできる事でもとても面倒な事せにゃならん
0651デフォルトの名無しさん
2008/10/04(土) 21:05:350652デフォルトの名無しさん
2008/10/04(土) 21:10:52自分で自分の感性の意味がわからん。
0653デフォルトの名無しさん
2008/10/04(土) 21:51:550654デフォルトの名無しさん
2008/10/04(土) 21:57:26なんか、逆にあんたの年代だけ明らかにしちゃったみたいで申し訳ないが・・・。
0655デフォルトの名無しさん
2008/10/04(土) 21:59:540656デフォルトの名無しさん
2008/10/04(土) 22:08:310657デフォルトの名無しさん
2008/10/04(土) 23:40:070658デフォルトの名無しさん
2008/10/05(日) 00:18:560659デフォルトの名無しさん
2008/10/05(日) 00:48:17ブースカブースカうるせー
0660デフォルトの名無しさん
2008/10/05(日) 02:08:020661デフォルトの名無しさん
2008/10/05(日) 03:22:57日立とかのコンパイラで全く通らないから
他のベンダ系企業でも多分使うのは無理だな。
0662デフォルトの名無しさん
2008/10/05(日) 08:48:18通らないヘッダを教えてくれ
0663デフォルトの名無しさん
2008/10/05(日) 10:38:30あとはSunのコンパイラとAIXとか?
0664デフォルトの名無しさん
2008/10/05(日) 11:38:280665デフォルトの名無しさん
2008/10/05(日) 12:39:55全部がだめってことは無いだろ。互換性が厳しいのはmplとかlambdaとかぐらいじゃないのか?
実装依存な部分もあるようだが、そういう違いを平らにしてくれるメリットの方が大きいと思うよ。
0666デフォルトの名無しさん
2008/10/05(日) 13:12:020667デフォルトの名無しさん
2008/10/05(日) 13:45:080668デフォルトの名無しさん
2008/10/05(日) 14:13:07今の実装には、環境依存のworkaroundが大量にあるとしてもだ。
だからMPLが使えないコンパイラというのは、そもそもC++のコンパイラじゃないからどうでもいいよ。
0669デフォルトの名無しさん
2008/10/05(日) 14:40:44>C++ 標準ライブラリに依っている。多くの現代的なコンパイラは
>それらの有名な機能をなかなか良くサポートしている。しかし C++
>標準の採択から数年を経た今となっても、いくつかのコンパイラは
>部分特別化のような、重要なマイナー機能をサポートしていない。
>Boost ライブラリの作者はしばしば機能の不足しているコンパイラ
>環境で作うまく動かそうとしてたくさんの努力を費やす。それにも
>かかわらず、いくつかのライブラリはいくかのコンパイラで全くコンパイル
>されないか、機能を減らされているかもしれない。たとえコンパイラの
>最新リリースが Boost ライブラリをサポートするとしても、古いバージョン
>のコンパイラは正しく動かないかもしれない。
boostではコンパイラの限界も試されますよと。どのコンパイラも仲良くといこうね
という世界ではない気がする。
0670デフォルトの名無しさん
2008/10/05(日) 17:56:35そのために標準に準拠していると言う建前のコンパイラは少なからぬバグを抱える羽目になる、C++の宿命見たいなものなのかねぇ
0671デフォルトの名無しさん
2008/10/05(日) 18:02:500672デフォルトの名無しさん
2008/10/05(日) 18:25:22さてm1とm2のプリミティブはどっち?
typedef int A;
class T {
A m1;
typedef double A;
A m2;
};
0673デフォルトの名無しさん
2008/10/05(日) 18:26:07○さてm1とm2のプリミティブはなに?
0674デフォルトの名無しさん
2008/10/05(日) 18:40:34「m1とm2の型はなに?」なら分かるけど
0675デフォルトの名無しさん
2008/10/05(日) 18:41:40コンパイルエラーになるのが正解のはず。D&Eで取り上げられていたから印象に残っている。
まあ試してみたら、VC++ 9でコンパイル通っちゃったけど。
(g++ 4.3.1ではエラーになった)
0676デフォルトの名無しさん
2008/10/05(日) 20:28:00m1はint型でm2はdouble型なので、どっちもプリミティブ。
0677デフォルトの名無しさん
2008/10/05(日) 20:41:33m1もdoubleじゃね?class/structの中に限って、上下関係無視するはず。
0678デフォルトの名無しさん
2008/10/05(日) 21:57:08bindの使い方がおかしいと思うのですが、どう直せばよいでしょうか? g++ 4.3.2です
struct Hoge {
bool (*Release)(Hoge*);
// private
int id_;
};
bool MyRelease(Hoge* thiz) {
std::cout << "Release: " << thiz->id_ << std::endl;
delete thiz;
return true;
}
bool CreateHoge(Hoge** h) {
static int nextid = 0;
(*h) = new Hoge;
(*h)->id_ = nextid++;
(*h)->Release = MyRelease;
return true;
}
int main(int ac, char** av) {
using namespace boost;
//Hoge* hoge = 0;
//CreateHoge(&hoge);
//hoge->Release(hoge);
shared_ptr<Hoge> hoge; {
Hoge* hoge_;
CreateHoge(&hoge_);
hoge.reset(hoge_, bind(bind(&Hoge::Release, hoge_), _1));
}
return 0;
}
0679デフォルトの名無しさん
2008/10/05(日) 22:15:10hoge.reset(hoge_, bind(hoge_->Release, hoge_));で。
0680デフォルトの名無しさん
2008/10/05(日) 22:19:39> bind(bind(&Hoge::Release, hoge_), _1)
この部分、全体で一引数関数を作ることを意図してるんだと思うけど、実際には
bind(&Hoge::Release, hoge_)
という関数(引数を捨ててhoge_.Releaseを返す関数)が作られて、それに対してbindしてる
boost::bindの代わりにboost::lambda::bindを使えば意図した動作になった
0681デフォルトの名無しさん
2008/10/05(日) 22:27:09bind(bind(&Hoge::Release, _1), _1)
じゃなくていいのだろうか
0682678
2008/10/05(日) 22:32:03boost::lambda::bind(boost::lambda::bind(&Hoge::Release, hoge_), boost::lambda::bind::_1)
両方で期待していた挙動を示すことを確認しました。
ありがとうございます。
0683デフォルトの名無しさん
2008/10/08(水) 11:08:34各ライブラリの使い方ではなくて、実例集みたいなの公開してるところってないですか?
プログラム本って文法書はたくさんあるのに、コードコンプリートみたいな本が少なくて
想像力、発想力がない奴には独学きついっす。
0684デフォルトの名無しさん
2008/10/08(水) 12:39:12使い方と生きたコードの中間になるようなサンプルが欲しいとは俺もよく思う
0685デフォルトの名無しさん
2008/10/08(水) 12:39:59俺の言語感覚では、実例集ってのは、実際の使い方やサンプルコードの類だと思うんだが
使い方ではないとはこれいかに。
実装方法か?
0686デフォルトの名無しさん
2008/10/08(水) 17:15:54Asioのサンプルは比較的そういう感じに近いと思う。
0687デフォルトの名無しさん
2008/10/08(水) 20:43:180688デフォルトの名無しさん
2008/10/08(水) 20:47:240689デフォルトの名無しさん
2008/10/08(水) 22:50:50http://www.oreilly.co.jp/books/4873113032/
とか?
0690デフォルトの名無しさん
2008/10/09(木) 21:04:01まだ斜め読みしかしてないけど
>>633
の本あたりを求めてそうな感じだな
この本、文字列をわざわざ日本語にしてるみたいだけど
やめてほしいな
typedef std::map<std::string, std::vector<int> > map_type;
map_type m;
m["奇妙?"].push_back(3);
m["きもい?"].push_back(4);
とか。翻訳者はLokiの人か
0691デフォルトの名無しさん
2008/10/10(金) 22:07:33ttp://booster.x0.to/
0692デフォルトの名無しさん
2008/10/11(土) 01:11:050693デフォルトの名無しさん
2008/10/11(土) 14:02:51俺としては言葉狩りしてでも廃絶すべき言葉の筆頭なのだが。
0694デフォルトの名無しさん
2008/10/11(土) 15:39:090695デフォルトの名無しさん
2008/10/12(日) 12:50:40下のソースでストリームはOKですが、lexical_castは例外が出ます。何故でしょうか。
lexical_cast内でストリームからの読み込みがうまくないみたいです。STL portに変えた方がいいのでしょうか?
#include <string>
#include <boost/lexical_cast.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>
int main(int argc, char* argv[])
{
typedef boost::tuple<double,double,double> D3;
D3 d30=boost::make_tuple(101,102,103);
std::stringstream strm;
strm<<d30;
D3 d31;
strm>>d31; // OK
std::string str=boost::lexical_cast<std::string>(d30);
D3 d32=boost::lexical_cast<D3>(str); // 例外
return 0;
}
0696デフォルトの名無しさん
2008/10/12(日) 15:29:42この問題だな
0698デフォルトの名無しさん
2008/10/13(月) 12:03:43//static_check.h
namespace Loki
{
template<int> struct CompileTimeError;
template<> struct CompileTimeError<true> {};
}
#define STATIC_CHECK(expr, msg) \
{ Loki::CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; }
最後の(void)ERROR_##msg; は何のためにあるのでしょうか。
直前にERROR_##msg があるので不要なように思うのですが。
実際VC2008EEとbcc5.5.1ではなくても同じコンパイルエラーメッセージでした。
また(void)は何のためにあるのでしょうか。
0699698
2008/10/13(月) 12:14:38STATIC_CHECK(0, aho);
[VC2008EE]
error C2079: 'ERROR_aho' が 未定義の struct 'Loki::CompileTimeError<__formal>' で使用しています。
[bcc]
エラー E2450 未定義の構造体 'Loki::CompileTimeError<0>'(関数 main(int,char * *) )
0700デフォルトの名無しさん
2008/10/13(月) 13:15:00voidへのキャストも警告がらみな気がする
0702デフォルトの名無しさん
2008/10/15(水) 00:53:49同じ型構成のfusion::tupleのインスタンスの値2つを受け取って、
それぞれの同じ位置にある同じ型の値同士で演算を行って
同じ型構成の値を返す演算をしたいと思ったのですが、
どうやるのか、そもそもできるのかが判りません
transformを使って
template<typename T>
T fuga(const T& x, const T& y) {
return x + y;
}
struct Hoge {
template<typename T>
T operator()(const T& x, const T& y) {
return fuga(x,y);
}
template<typename T>
struct result {
typedef T type; // (*)
};
};
z = transform(x, y, Hoge());
みたいにできないかと思ったのですが、関数オブジェクト内で定めている
返り値の型(*)を動的に定められる訳がないので当然うまくいきません。
よいお知恵を頂けないでしょうか m( _ _ )m
0703デフォルトの名無しさん
2008/10/15(水) 02:02:25単にresultテンプレートの書き方が間違ってるだけ
struct Hoge {
template<typename T>
T operator()(const T& x, const T& y) const { /* operator()はconst */
return fuga(x,y);
}
template<typename T>
struct result;
template <typename T>
struct result<Hoge(T, T)> {
typedef T type;
};
};
これで通ったよ
0704702
2008/10/15(水) 03:22:59>703
今眠い上に酔ってて頭が回りません orz
コンパイルが通って動くところまでは確認しました
明日ちゃんと確認しておきます
ありがとうございました!
0705デフォルトの名無しさん
2008/10/15(水) 09:20:030706デフォルトの名無しさん
2008/10/17(金) 13:05:310707デフォルトの名無しさん
2008/10/17(金) 13:45:020708デフォルトの名無しさん
2008/10/17(金) 20:14:34ttp://booster.x0.to/
0709デフォルトの名無しさん
2008/10/17(金) 20:31:23ZIPだとマウントして使えるので、解凍しなくて使えてHDDが1G以上節約できるので。(解凍しても使えます。)
サイズが、70M → 125Mくらいになってしまうのですが。
0710デフォルトの名無しさん
2008/10/17(金) 20:41:540711デフォルトの名無しさん
2008/10/17(金) 20:48:150712デフォルトの名無しさん
2008/10/17(金) 21:09:05一見さんにも優しくなるとは思えない。
RARはマイナーだからとかそういう理由ならまだ分かるけど。
0713デフォルトの名無しさん
2008/10/17(金) 21:13:530714デフォルトの名無しさん
2008/10/17(金) 21:14:540715デフォルトの名無しさん
2008/10/17(金) 21:18:25今度はファイルサイズが大きくなってもいいからzipにしろとかどんだけ自己中だよ
0716デフォルトの名無しさん
2008/10/17(金) 21:21:080717デフォルトの名無しさん
2008/10/17(金) 21:36:000718デフォルトの名無しさん
2008/10/17(金) 21:48:37重複有りだとどちらも多くなります。ZIPのマウントならば、120Mしか掛からず、展開せず直ぐに使えない。
一見さんがやめたい場合もZIPを消すだけです。
0719デフォルトの名無しさん
2008/10/17(金) 21:49:24展開せず直ぐに使えない。 -> 展開せず直ぐに使えます。
0720デフォルトの名無しさん
2008/10/17(金) 21:51:25HDDが足りないのなら必要なものだけビルドすればいい。リンクエラーが出てからで十分。殆どはビルド不要。
boostのホームページのインストーラを使えば必要な機能だけ選択してインストールできる。
0721デフォルトの名無しさん
2008/10/17(金) 21:54:01下手しなくてもBoostの導入よりよっぽど敷居が高いぞ。
0722デフォルトの名無しさん
2008/10/17(金) 21:55:530723デフォルトの名無しさん
2008/10/17(金) 21:56:320724デフォルトの名無しさん
2008/10/17(金) 22:08:46mplとかspiritとか使うとコンパイルが遅くて泣くぞ?
0725デフォルトの名無しさん
2008/10/17(金) 22:10:33それは冗談だが、そもそもbooster.x0.toのは最新を追っかけている時点で初心者・一見さん向きでない感じがする。
0726デフォルトの名無しさん
2008/10/17(金) 22:10:470727デフォルトの名無しさん
2008/10/17(金) 22:12:09>>725
結婚して下さい。
0728デフォルトの名無しさん
2008/10/18(土) 00:20:36回線が50KB/s、登りが10KB/s以下なのでサーバーは無理だ
0729デフォルトの名無しさん
2008/10/18(土) 00:47:04逐次コンパイル向けのディレクティブ設定とかないの?
0730デフォルトの名無しさん
2008/10/18(土) 01:32:150731デフォルトの名無しさん
2008/10/18(土) 10:13:220732デフォルトの名無しさん
2008/10/18(土) 10:15:070733デフォルトの名無しさん
2008/10/18(土) 10:18:360734デフォルトの名無しさん
2008/10/18(土) 10:55:120735デフォルトの名無しさん
2008/10/18(土) 11:18:410736デフォルトの名無しさん
2008/10/18(土) 20:05:360737デフォルトの名無しさん
2008/10/19(日) 23:31:490738デフォルトの名無しさん
2008/10/22(水) 00:39:090739デフォルトの名無しさん
2008/10/22(水) 00:59:030740デフォルトの名無しさん
2008/10/22(水) 01:23:500741740
2008/10/22(水) 03:11:31これはUNIXドメインソケットしか使えないと思っていました
ありがとうございます
0742デフォルトの名無しさん
2008/10/22(水) 10:03:12あんまり範囲を広げずによく使うやつに絞って解説されてるのがいいね。
原書はちょっと古いらしいが、古びない内容だと思う。
すでにバリバリに使ってる人には物足りないだろうな。
0743デフォルトの名無しさん
2008/10/23(木) 10:39:44m[2][3];
ができなくなって
m(2,3);
に統一されたのはなんで?
0744デフォルトの名無しさん
2008/10/23(木) 14:05:16mallocあるいはconstructから返されたポインタを、生のポインタで扱うのは危険じゃないかと気になりました。
(deleteしてはいけなかったり、poolオブジェクトが寿命がつきたらポインタにアクセスしてはいけなかったりと・・)
解決方法は、
1、安全性を重視して、ハンドルクラスを書いてハンドルで扱う
2、そもそも速度が欲しくてpoolを使っているのだから、注意深く生のポインタを扱う
他にありますでしょうか?
0745デフォルトの名無しさん
2008/10/23(木) 17:49:12コンテナみたいに外部からは意識しなくてもいいようにすべきじゃね?
0746デフォルトの名無しさん
2008/10/23(木) 18:23:00うーん、生成したいオブジェクトのコンストラクトと、poolが切り離せないのが困ります。
vectorのpush_backは構築されたオブジェクトを引数で受け取って、コピーコンストラクタで内部にコピーしてますよね。
これだと効率が悪くてまずいです。
0747デフォルトの名無しさん
2008/10/23(木) 19:26:26今は無理だが、C++0xを待ちたまえ。
コンテナにemplaceが追加されるぞ。
Variable Templatesを使ってコンストラクタへの引数を受け取るpush_backなどだ。
0748デフォルトの名無しさん
2008/10/23(木) 19:57:09おーそれは便利ですね。
しかし、現状poolの使い方が設計的な意味で難しいですね。
どうラップすればよいのか・・。
0749デフォルトの名無しさん
2008/10/23(木) 20:09:20そもそも、poolに期待するのは、サイズ固定でmallocと同じような振る舞いだろ。
0750デフォルトの名無しさん
2008/10/23(木) 21:08:01実装量の割に合わないからじゃないの?
(2,3)とかってやるほうが早いし.
[2][3]を許す場合matrix_expressionから派生すべてのクラスで
proxyクラス作らなきゃだし.
0751デフォルトの名無しさん
2008/10/24(金) 02:27:550752デフォルトの名無しさん
2008/10/25(土) 01:55:44ttp://booster.x0.to/
圧縮形式につきましては、要領削減の観点からrarを使用しておりますが
他の形式への変更要望が多数ある様でしたら変更を検討致します。
0753デフォルトの名無しさん
2008/10/25(土) 06:38:23本家も使っているし。
0754デフォルトの名無しさん
2008/10/25(土) 09:24:535倍掛かって、10%程度だろ
0755デフォルトの名無しさん
2008/10/25(土) 10:13:550756デフォルトの名無しさん
2008/10/25(土) 13:07:06正規ライセンスのソフトで圧縮してるならいいが、
不正なライセンスとか未登録状態で圧縮してるなら、
解凍して利用する側まで不正なライセンス使用に汚染される。
0757デフォルトの名無しさん
2008/10/25(土) 13:38:48解凍せずに使えるので。 上でzipといってた人です。 一見さん、最新版に直ぐ入れ替えたい
人にもお勧めですよ。 zipのままコンパイルにつかえるので
0758デフォルトの名無しさん
2008/10/25(土) 17:59:24ボランティアでやっているんだ、あんたの好きにすればいいよ。
つーか、ここはあんたのアンケート会場じゃないんだから情報収集するなよ。
また>757みたいなのが沸いて鬱陶しいじゃないか。
0759デフォルトの名無しさん
2008/10/25(土) 20:14:030760デフォルトの名無しさん
2008/10/26(日) 00:16:52TARでもGCAでもACEでも好きなの使ってくれ
0761デフォルトの名無しさん
2008/10/26(日) 01:23:54正しい解釈か自信がないので質問させてください。
boost::shared_array<A> arr(new A[100]);
A* a = &arr[99];
とした時、aにはarrの保持するA型配列99番目の要素へのポインタが格納される。
でOKでしょうか
0762デフォルトの名無しさん
2008/10/26(日) 01:27:41先頭要素を 0 番目と呼ぶならそのとおり。
boost 関係なくね?
0763デフォルトの名無しさん
2008/10/26(日) 01:42:31回答ありがとうございます。
迷ったのですが、一応通常の配列アクセスではなく、
shared_array側でオーバーロードされた[]を利用しているので、
こちらで質問させていただきました。すみません
0764デフォルトの名無しさん
2008/10/26(日) 04:49:22mutexとかshared_ptrまわりでなんか変更あった?
0765デフォルトの名無しさん
2008/10/26(日) 05:07:41使ってないから詳しくは知らんが
0766デフォルトの名無しさん
2008/10/26(日) 20:02:41>> A. shared_ptr は unique() な時をのぞいて、所有権を譲渡できない。
>> なぜなら、いずれは所有権を共有している他の shared_ptr が、そのオブジェクトを削除するはずだからである。
ユニークな時は所有権を譲渡できるという事ですよね?
どうやって譲渡するんですか?
0767デフォルトの名無しさん
2008/10/26(日) 20:15:26それを実装するのはあなたです。swap()に書いたり。
C++0xではそれを実装する場所は、
move semanticsを記述するoperator=(T &&)のところになります。
0768デフォルトの名無しさん
2008/10/26(日) 20:42:20すみません、よくわからないです。
所有権とはdeleteする義務だと思っていました。
生のポインタを取り出すだけならget()でできますが、これをそのまま別の場所に保管していても、
shared_ptrのデストラクタでdeleteされてしまいますよね。
どうすれば一度shared_ptrに入れたポインタのdeleteの義務をshared_ptrから移すことができるんですか?
0769デフォルトの名無しさん
2008/10/26(日) 20:55:58だし、swapでポインタは書き換えられるし。
0770デフォルトの名無しさん
2008/10/26(日) 20:57:31そういう意味では、shared_ptrから所有権をもらうことはできない。
(基のQにあるように、そもそもreleaseが無い以上uniqueであっても手段がない)
だから、中身を移すことで似たようなことを再現することになる。
shared_ptr<T> sp(new T);
T x;
swap(x, *sp); //0xならx = std::move(*sp);
0771デフォルトの名無しさん
2008/10/26(日) 21:41:23boostのサイトの文を勘違いして読んでいました。
例えrelease関数が用意されていたとしても、uniqueでなければ所有権譲渡にならないという意味だったんですね。
0772デフォルトの名無しさん
2008/10/27(月) 16:08:24Xのoperator newが定義されていない場合(デフォのまま)でも、コンパイルエラーにならないのはどういう仕組みなんですか?
0773デフォルトの名無しさん
2008/10/27(月) 16:53:580774デフォルトの名無しさん
2008/10/27(月) 18:22:53try { new (ret) element_type(); }
これはoperator newではないんですか?
0775デフォルトの名無しさん
2008/10/27(月) 18:38:510776デフォルトの名無しさん
2008/10/27(月) 19:09:01<new>に
void* operator new(std::size_t, void*) throw();
が定義されていました。
thxでした。
0777デフォルトの名無しさん
2008/10/27(月) 19:09:19それが使われるだろうが、例えそれが無くても<new>にある
大域名前空間のoperator new(void*)が見つかるので問題ない。
0778デフォルトの名無しさん
2008/10/27(月) 20:39:45は配置new構文であってoperator newと直接の関係は無いからな
0779698
2008/10/28(火) 20:11:15(void)はlokiの別のソースで、get rid of warning と書いてありました。
スレ違い気味ですが、ご報告まで。
0780デフォルトの名無しさん
2008/10/28(火) 20:21:00それがうざいから(void)printfと書いてある古いソースは結構ある。
0782デフォルトの名無しさん
2008/10/28(火) 21:04:26式文がないと使ってねーよのwarningが出る。
0783デフォルトの名無しさん
2008/10/31(金) 18:05:07ttp://booster.x0.to/
0784デフォルトの名無しさん
2008/11/03(月) 10:16:50最近バージョン上がるの無茶苦茶速いね
0785デフォルトの名無しさん
2008/11/03(月) 19:43:31ttp://www.boost.org/development/index.html
のカレンダーを見るに、3ヶ月に1回リリースするつもりみたいよ?
0786デフォルトの名無しさん
2008/11/03(月) 22:06:430787デフォルトの名無しさん
2008/11/03(月) 22:51:29...patience...
...found 660 targets...
...using 1 temp target...
...updating 2 targets...
...using <p../../../bin.v2/libs/optional/test/optional_test_ref.test/gcc-4.2.4/debug>optional_test_ref...
testing.capture-output ../../../bin.v2/libs/optional/test/optional_test_ref.test/gcc-4.2.4/debug/optional_test_ref.run
====== BEGIN OUTPUT ======
optional_test_ref.cpp(351): test &(*orci1) == &ci failed in function: 'void test_binding()'
**** 1 error detected
EXIT STATUS: 201
====== END OUTPUT ======
相変わらずこのテスト通らないんだな…
0788デフォルトの名無しさん
2008/11/04(火) 19:30:56ネタ切れになるとやたらとバージョンを上げるようになるw
0789デフォルトの名無しさん
2008/11/04(火) 21:11:540790デフォルトの名無しさん
2008/11/04(火) 21:27:440791デフォルトの名無しさん
2008/11/04(火) 22:13:470792デフォルトの名無しさん
2008/11/04(火) 23:08:27無理っぽい気が
0793デフォルトの名無しさん
2008/11/04(火) 23:26:090794デフォルトの名無しさん
2008/11/04(火) 23:41:45mocの部分のtemplate化が出来たら問題なし。
0795デフォルトの名無しさん
2008/11/05(水) 01:18:590796デフォルトの名無しさん
2008/11/07(金) 20:30:23ttp://booster.x0.to/
SVNは1.38に移行しました。
0797デフォルトの名無しさん
2008/11/08(土) 09:18:18乙乙です
0798デフォルトの名無しさん
2008/11/11(火) 08:19:46ovenとかspiritを使ったコードでもflymakeを使って楽したい
0799デフォルトの名無しさん
2008/11/11(火) 08:47:080800デフォルトの名無しさん
2008/11/11(火) 11:01:200801デフォルトの名無しさん
2008/11/13(木) 17:49:220802デフォルトの名無しさん
2008/11/14(金) 00:22:420803デフォルトの名無しさん
2008/11/14(金) 06:32:55/ /´ -‐…‐- .`\
/ /´ i !`ヽト、
. ,ヘ ,' i ! ! | |i |ハ i ヽ キリッ
/ ゝ! ノ| ! !::__!::ノ ´  ̄ i::.i |!
\ .| .:i i :i i |´ \ / `!、ハ:!
`ヽi 从 i i | ニニミ .ニニ !:::::| VC9.0SP1を使ってるんだけどもしかしてBOOST_TYPEOF使えなくなった?
. | YハiハN {r::リ` ´{r::リ '::::N
. | ヽゝ ´´ ``ハ!`
. |∧ �Y! ′ ,':::|
j/∧ _!::} 、 ⊂' ..イ:::::|
///∧´ ∨ ` ,.... ィ´゙Y:::::|
. /////∧ ヽ {ト、∧ |::::::!
,< ̄ ̄∧ } `ヽ >''} { ̄`ヽ
. / `ヽ:::::::::Y´ヽ i´`∨::::∧
/ ∨:::::| .:: ! i .:.: !::::/ i
_ ___
,. :'´: :,. -―‐-ミ:ヽ、
/: : : :厶ィ': ´ ̄ ̄ヾ : :\
/: : : : : :.!: :M: : : : : }、: ヽト、:.\ <じゃっておwww
i: : :.!: : : レ‐' ` ̄⌒ ⌒" トヘ:ハ!
ト--|: : :.!: : 、| ー‐'' ´ `'ー }: :.ト
ミ ミ ミ : :!: : : :! z=≡ ≡z.{: :.ハ ミ ミ ミ
/⌒)⌒)⌒.ハ :_Nとつ \\\ C VVリ /⌒)⌒)⌒)
| / / /:弋こ \ヽ __,. } (⌒)/ / / //
| :::::::::::(⌒) : :}\ / 1 / ゝ :::::::::::/
| ノくf⌒Y ` {_ _,ノイ| / ) /
ヽ / ヽ ヘ,、 _「 |::!:::::} / / バ
| | l||l 从人 l||l.!::|イ:::ヽ_./ l||l 从人 l||l バ ン
ヽ -一''''''"~~``'ー--、/:::::イ; -一'''''''ー-、 ン
ヽ ____(⌒)(⌒)⌒) ):::/} (⌒_(⌒)⌒)⌒))
0804デフォルトの名無しさん
2008/11/14(金) 08:48:30本来native typeofは使えないものなんだよ
0805デフォルトの名無しさん
2008/11/15(土) 00:45:53ttp://booster.x0.to/
0806デフォルトの名無しさん
2008/11/15(土) 00:53:200807デフォルトの名無しさん
2008/11/18(火) 12:56:22出来ると思っていたのですが、同じタグで情報を流しこむと上書きされてしまうようです。
class MyException : public boost::exception{}
try
{
MyException
}
catch()
{
これでは上手く上乗せできないように思えるのですが、
また、let's boostを見ていたら
「スレッドを超えて例外を飛ばす場合のデータの所有権管理などもうまいことやってくれる模様」
とあったのですが、これはどういうことなのでしょうか?
また、同じタグの情報を複数残せませんが、キャッチしたexceptionクラスにそこで
0808デフォルトの名無しさん
2008/11/18(火) 13:06:28boost::exceptionについて質問なのですが、キャッチした情報にさらに上乗せして再スロー
出来ると思っていたのですが、同じタグで情報を流しこむと上書きされてしまうようです。
class MyException : public boost::exception{}
typedef boost::error_info<struct tag_errmsg, string> errmsg_info;
try
{
throw MyException() << BOOST_ERROR_INFO << errmsg_info("error1");
}
catch(MyException &e)
{
e << BOOST_ERROR_INFO << errmsg_info("error2");
std::cout << boost::diagnostic_information(e);
}
0809デフォルトの名無しさん
2008/11/18(火) 13:08:24----出力結果-----
.\src\app\App.cpp(110): Throw in function void __thiscall App::Start(void)
Dynamic exception type: class MyException
std::exception::what:
[struct tag_errmsg *] = error2
[struct tag_errno *] = 123
そもそもこんな使い方であってるんでしょうか?
もっと効率のいい例外処理方法がありましたらご教授願えませんでしょうか。
また、let's boostを見ていたら
「スレッドを超えて例外を飛ばす場合のデータの所有権管理などもうまいことやってくれる模様」
とあったのですが、これはどういうことなのでしょうか?
長文すみませんでした。
0810デフォルトの名無しさん
2008/11/18(火) 13:59:57それが嫌なら自分でBOOST_ERROR_INFOに相当するものを書くしかない。
template<int i> struct my_error_line;
#define MY_ERROR_INFO(i) error_info<my_error_line<i>, int>(__LINE__)
こんな具合に。
毎回iに違う定数を入れておけば、違う型だから上書きはされない。
定数iの代わりにBOOST_CURRENT_FUNCTIONなんかを使えればスマートなんだろうけど、
文字列リテラルを式の中で一意な型に変換する方法が思いつかないのであきらめた。
1.37だとBOOST_ERROR_INFOはBOOST_THROW_EXCEPTION()マクロで置き換えられているから、
それなら
#define MY_THROW_EXCEPTION(e) MY_THROW_EXCEPTION_IMPL(e, BOOST_CURRENT_FUNCTION)
#define MY_THROW_EXCEPTION_IMPL(e, f) \
{ \
struct my_error_line##f; \
boost::throw_exception(e) << error_info<my_error_line##f, int>(__LINE__);\
}
のように書けば、投げ直す度に情報が記録される。 万全を期すなら関数名と行数で型名を作ってもいいね。
スレッド越しのthrowは使ったことがないので他の人の解説希望。
0811808
2008/11/18(火) 16:44:57C#のように、キャッチした例外を包含して再スローできるのかと思ってたのですが違うんですね。
1.37をインストールして、教えてもらった方法で試してみます。
0812デフォルトの名無しさん
2008/11/18(火) 16:50:05お前の考えているC#のってどんなのだ?
0813デフォルトの名無しさん
2008/11/19(水) 09:21:29{
throw new System.Exception( "エラー", e );
}
みたいな。↑みたいなメッセージではあまり意味がないですが^^;
最上位で包含してる例外オブジェクトを拾ったり、まとめてエラーログの出力などができて便利です
0814デフォルトの名無しさん
2008/11/19(水) 09:42:26とかそういうのでいいんじゃないかねぇ
0815デフォルトの名無しさん
2008/11/19(水) 10:15:19boostと関係なくなってしまいましたがありがとうございました。
0816デフォルトの名無しさん
2008/11/19(水) 10:41:02> 「スレッドを超えて例外を飛ばす場合
例外オブジェクトのスレッドを越えた持ち運び時の
スタックアロケーションなハンドルとの関係など。
0817デフォルトの名無しさん
2008/11/19(水) 11:01:32error_info として source_exception とか作ればいいんじゃないか?
それをライブラリで用意しといて欲しいとは思うけどね。
0818デフォルトの名無しさん
2008/11/21(金) 19:43:15ttp://booster.x0.to/
0819デフォルトの名無しさん
2008/11/21(金) 21:40:220820デフォルトの名無しさん
2008/11/23(日) 15:22:09boost::mpl::max_element<boost::mpl::transform_view<boost::mpl::vector_c<int, 0, 1, 2, 1, 0>, boost::mpl::_1::value> >::type::value
でうまくいきません。
0821デフォルトの名無しさん
2008/11/23(日) 15:35:41どうやらboost::mpl::_1とした上でboost::mpl::derefを使えば良いようです。
ありがとうございました。
0822デフォルトの名無しさん
2008/11/25(火) 18:48:230823デフォルトの名無しさん
2008/11/29(土) 02:00:48ttp://booster.x0.to/
0824デフォルトの名無しさん
2008/12/06(土) 07:20:31ttp://booster.x0.to/
0825デフォルトの名無しさん
2008/12/06(土) 07:55:23乙乙 (ダブルオツー)
0826デフォルトの名無しさん
2008/12/09(火) 23:28:240827デフォルトの名無しさん
2008/12/09(火) 23:30:35俺progress_displayな
0828デフォルトの名無しさん
2008/12/09(火) 23:37:050829デフォルトの名無しさん
2008/12/09(火) 23:44:030830デフォルトの名無しさん
2008/12/10(水) 01:59:450831デフォルトの名無しさん
2008/12/10(水) 10:16:010832デフォルトの名無しさん
2008/12/10(水) 10:44:080833デフォルトの名無しさん
2008/12/10(水) 11:00:040834デフォルトの名無しさん
2008/12/11(木) 01:04:200835デフォルトの名無しさん
2008/12/11(木) 02:57:53xpressive、テメェーの.objは一体何MBだァーー?言ってみやがれッ!」
0836デフォルトの名無しさん
2008/12/11(木) 10:44:520837デフォルトの名無しさん
2008/12/11(木) 14:19:34boost::functionで、引数を二つ以上持つメンバ関数を渡す方法が分かりません
LRESULT App::f(UINT, UINT) があった場合
boost::function2<LRESULT, UINT, UINT> func = std::bind1st( std::mem_fun(&App::f), this );
とすると
error C2784: 'std::mem_fun1_t<_Result,_Ty,_Arg> std::mem_fun(_Result (__thiscall _Ty::* )(_Arg))'
: テンプレート 引数を '_Result (__thiscall _Ty::* )(_Arg)' に対して 'LRESULT (__thiscall App::* )(UINT,UINT)' から減少できませんでした
と言うエラーが表示されてしまい困っています。
メンバ関数でないか、引数が一つであれば正常に動作するのですが、何がいけないのでしょうか
宜しくお願いします。
0838デフォルトの名無しさん
2008/12/11(木) 15:34:35std::mem_funは、引数無しか引数が一つのメンバ関数しか受け付けないから。
boost::mem_fn使え。
あと、その場合だとbind1stもダメだからboost::bindを使う。
0839デフォルトの名無しさん
2008/12/11(木) 16:48:010840デフォルトの名無しさん
2008/12/11(木) 16:55:48boost::function<LRESULT(UINT, UINT)> func = boost::bind(&App::f, this, _1, _2);
つくづくfunctionとbindの組み合わせはすばらしいな
autoが入ればいらなくなるboost::functionも多そうだけど
0841デフォルトの名無しさん
2008/12/11(木) 20:09:19bind はむきー!となって死ねるので、個人的には lambda 式に期待している
0842デフォルトの名無しさん
2008/12/11(木) 20:37:28おかげでtemplate-templateパラメータでデフォルトのアロケータとの混在ができません。
0843デフォルトの名無しさん
2008/12/11(木) 21:09:150844デフォルトの名無しさん
2008/12/11(木) 22:56:340845デフォルトの名無しさん
2008/12/12(金) 10:17:07ここは別のクラスを作ってラップするのがベター。
0846837
2008/12/12(金) 16:17:16返信遅れてすみません。bindでうまくいきました!
しかしなんて言うか・・・すごいなBoost
すごいを通り越してキモイww
0847デフォルトの名無しさん
2008/12/12(金) 16:58:56ラムダ版のほうでとっとと統一してほしいところ
あと、phoenixとlambdaの統合も早いトコよろしく
0848デフォルトの名無しさん
2008/12/12(金) 22:44:170849デフォルトの名無しさん
2008/12/13(土) 07:14:32ttp://booster.x0.to/
0850デフォルトの名無しさん
2008/12/13(土) 09:49:10boost::threadはビルドしないと使えないのを嫌ったのかな…。
0851デフォルトの名無しさん
2008/12/13(土) 16:50:57gcd/lcmになるともう(ry
0852デフォルトの名無しさん
2008/12/13(土) 23:47:35Threadの使ったって俺は気にしないのに。
0853デフォルトの名無しさん
2008/12/16(火) 23:19:17御臨終するようになったので、代案を考えてみた。
namespace ezforeach_util {
//配列とコンテナの扱いを共通化する為のbegin,endフック
template<class PtrT, class AryT, size_t N>
PtrT GetBegin(AryT (&Ary_)[N]) {
return &Ary_[0];
};
template<class PtrT, class AryT>
PtrT GetBegin(AryT &Ary_) {
return Ary_.begin();
};
template<class PtrT, class AryT, size_t N>
PtrT GetEnd(AryT (&Ary_)[N]) {
return &Ary_[N];
};
template<class PtrT, class AryT>
PtrT GetEnd(AryT &Ary_) {
return Ary_.end();
};
};
//インテリセンスに負荷をかけない簡易foreach
#define ezforeach(ITR_T, ITR, CON) \
for(ITR_T ITR = ezforeach_util::GetBegin<ITR_T>(CON); \
ITR != ezforeach_util::GetEnd<ITR_T>(CON); ITR++)
0854デフォルトの名無しさん
2008/12/16(火) 23:30:41typedef std::vector<std::vector<int>> vec_t;
vec_t v;
int a[10];
v.resize(5);
int c = 0;
//引数はコンテナイテレータ型、イテレータ、コンテナ
ezforeach(vec_t::iterator, itr, v) {
itr->push_back(c++); //中でもインテリセンスが効く
}
//配列の場合は要素のポインタ型、ポインタ、配列
ezforeach(int*, ptr, a) *ptr = 1; //一行表記も可
0855デフォルトの名無しさん
2008/12/17(水) 02:04:132. VC++なら、参照型を使わない限り大抵#define BOOST_FOREACH(e, c) for each (e in (c))で良いはずだが?
参照型を使いたいんだという異論は認める。
0856デフォルトの名無しさん
2008/12/17(水) 10:26:16HostName = *(DomainLabel >> ch_p('.')) >> TOPLABELp >> !ch_p('.');
DomainLabel = alnum_p | (alnum_p >> *(alnum_p | ch_p('-')) >> alnum_p);
TopLabel = alpha_p | (alpha_p >> *(alnum_p | ch_p('-')) >> alnum_p);
これだと、DomainLabelとTopLabelがそれぞれalpha_pとalnum_pに引っかかってしまうため、
それぞれ下のように書き直しました。
DomainLabel = alnum_p >> *((*ch_p('-') >> alnum_p) | alnum_p);
TopLabel = alpha_p >> *((*ch_p('-') >> alnum_p) | alnum_p);
この状態で、だいたいのマッチングは行えるのですが、
"com" '.'の部分がDomainLabelで判定されてしまい、
○www.google.com
×www.google.com.
となってしまいます。
どう書き換えればうまくマッチングを行えますか?
0857デフォルトの名無しさん
2008/12/17(水) 10:34:240858デフォルトの名無しさん
2008/12/17(水) 10:37:33A1:どうせ短いコードだし、boost無しでやりたかったので
A2:VCにfor eachが追加されてたのを知らなかったorz
0859デフォルトの名無しさん
2008/12/17(水) 12:25:36>参照型を使いたいんだという異論は認める。
ってのは、そこのことか。
0860デフォルトの名無しさん
2008/12/17(水) 19:11:36ありがとうございます。
>>856はURIパーサの一部で、/までチェックしてしまうと
パスのチェックがうまく働かなくなってしまいますので、できません。
0861デフォルトの名無しさん
2008/12/17(水) 20:41:09HostName = *(DomainLabel >> ch_p('.')) >> !DomainLabel;
DomainLabel = alnum_p >> *((*ch_p('-') >> alnum_p) | alnum_p);
0862デフォルトの名無しさん
2008/12/17(水) 20:44:46HostName = *(DomainLabel >> ch_p('.') >> eps_p(anychar_p)) >> TOPLABELp >> !ch_p('.');
としたらどうだろう?
ピリオドの後に1文字も無ければDomainLabelのほうでマッチしないようにしたつもりなんだけど。
0863デフォルトの名無しさん
2008/12/17(水) 21:40:00ありがとうございます。
入力は、もちろん
http://www.google.com.:80/
のようなテキストです。
ですので、入力切れを終端と判断出来ません。
また、DomainLabelはTopLabelをすべて含んでいます。
0864856,863
2008/12/17(水) 22:06:21>>862でのeps_pがヒントとなり解決出来ました。
HostName = DomainLoop >> TopLabel >> !ch_p('.');
DomainLoop = *(DomainLabel >> ch_p('.') >> eps_p(DomainLabel));
としたところ、うまくいきました。
0865デフォルトの名無しさん
2008/12/19(金) 21:43:57ttp://booster.x0.to/
0866デフォルトの名無しさん
2008/12/19(金) 23:05:29可変サイズのオブジェクトの割り当てを行うものはないでしょうか?
apache portable library の pool に相当するような感じで
解放のタイミングが明確 (割り当てたオブジェクトがいっせいに必要なくなる)
ような処理におけるメモリ割り当てを高速化したいのですが
0867デフォルトの名無しさん
2008/12/20(土) 07:37:510868デフォルトの名無しさん
2008/12/20(土) 12:49:23shared_ptr に入れて使うか scoped_ptr に入れて使うかわからないとき、
どうしたらいいかな?
生で new/delete すると例外安全にするのが面倒だし、
auto_ptr で返すと shared_ptr には渡せても scoped_ptr に渡せないんだよね。
なんで auto_ptr を scoped_ptr に変換できないの?
渡す方法ある?
0869デフォルトの名無しさん
2008/12/20(土) 12:51:210870デフォルトの名無しさん
2008/12/20(土) 16:05:27コアの部分をC++のスタティックライブラリで、
GUIをC++/CLI & WinFormで作ってる。
<boots/thread.hpp>をincludeすると、
GUIの方で以下のエラーが出る。
> エラー 31 fatal error LNK1104: ファイル 'libboost_thread-vc80-mt-gd-1_34_1.lib' を開くことができません。
boost thread以外(boost/randomとかboost/mathとか)は普通に使えてるし、なんでだろう?
ちなみにスタティックライブラリの方はコンパイルできてるから、CLIとの相性とかそこら辺を疑ってるんだけど…
Windows XP SP3
VC8.0 (VS2005)
boost 1.36.0
Boost ThreadはVS8.0用を全部インストールしてる(Multithread Debug DLL, Multithread DLL, Multithread, Multithread Debug)
0871デフォルトの名無しさん
2008/12/20(土) 16:11:38プログラミングのど素人かどうかは、エラーに対処できるかどうかで
だいたい判ってしまうな。
ライブラリ探索パスに、'libboost_thread-vc80-mt-gd-1_34_1.lib'が存在
するパスが登録されていなくて、リンカがライブラリを見つけられないか、
そもそも'libboost_thread-vc80-mt-gd-1_34_1.lib'ファイル自体が存在
していないから、そういうエラーメッセージが出る。
0872デフォルトの名無しさん
2008/12/20(土) 16:19:23この糞質問だらけの板でまともに自分の状況を記述して質問をできることに俺は素直に感心したがな
>>870
>boost thread以外(boost/randomとかboost/mathとか)は普通に使えてるし、なんでだろう?
randomとかmathはヘッダで完結していて.libを必要としないライブラリだからね。
原因は多分>>871の通り。
Tools -> Options -> Projects and Solutions -> VC++ Directories -> Library Files
に、libboost-なんちゃらのあるディレクトリを指定する。
今手元に英語版しかないので日本語版でどんな名前になってるかはわからん。
0873デフォルトの名無しさん
2008/12/20(土) 16:20:52>ちなみにスタティックライブラリの方はコンパイルできてるから
ここよくわからん。 もう少し詳しく解説希望。
特にBoost.threadをスタティックリンクするのかVCランタイムをスタティックリンクするのかの区別を。。。
0874870
2008/12/20(土) 16:35:14>>.871
ライブラリファイルのディレクトリにパスは通してますが、それでもダメ。
(こちらの環境だと C:\Program Files\boost\boost_1_36_0\lib )
あとエラーメッセージで無いよって言われているのが libboost_thread-vc80-mt-gd-1_34_1.lib なのかも謎…
1.36.0使ってるんだから、libboost_thread-vc80-mt-gd-1_36.libになるんじゃないのかなと。
過去に1.34.1入れたこともないし、うーん…?
>>872-873
1つのソリューションに
・my_core (スタティックライブラリ,C++)
・my_gui (C++/CLI & WinForm)
という2つのプロジェクトが入ってて、my_guiからmy_coreをリンクしてる
boostはmy_coreの方で使ってる(my_guiの方からはリンクしてない)んだけど、
コンパイルエラーが出るのはmy_guiの方なのが不思議,といった感じ
ググってたらC++/CLIじゃboost threadうごかねぇ!っていう書き込み見つけたんだけど、この人はC++/CLIから直接boost threadをリンクしてるみたいだから、ちょっと条件が違う気もする…
ttp://g-1.blog.so-net.ne.jp/2008-05-26
0875デフォルトの名無しさん
2008/12/20(土) 16:46:08ライブラリパスだけ更新してインクルードパスが古いままとかじゃない?
0876デフォルトの名無しさん
2008/12/20(土) 16:52:38リンカに直接libboost-(略)を指定してるわけじゃないんだよね?
今のboost::threadって、インクルードすると勝手に#pragmaでリンクする仕様だったっけ?
0877デフォルトの名無しさん
2008/12/20(土) 17:15:39そもそも1.34.1はインストールしたことないから、古い方をインクルードしてるってことは無い…はず…
(VS2005の設定でも、C:\Program Files\boost\boost_1_36_0 を指定してるし)
でもリンカが1.34.1をリンクしようとしてるってことは、1.34.1がどっかに入ってるってことだよね…
今使ってるマシンはインテルコンパイラやら市販のライブラリやらいっぱい入ってるんで、その影響かも?
とりあえず真っ新なマシンにVS2005とboost入れて試してみる
>>876
.libはまだ何も指定していない
( #include <boost/thread.hpp> を指定しただけの状態)
0878デフォルトの名無しさん
2008/12/20(土) 17:29:200879デフォルトの名無しさん
2008/12/20(土) 17:31:42パスディレクトリの直下に.libファイルないといけないんじゃないの?
0880デフォルトの名無しさん
2008/12/20(土) 17:48:02今はそういう問題じゃないたぶん
>>877
BOOST_LIB_VERSIONってマクロが<boost/version.hpp>にあって、
thread.hppが自動リンクする場合はそれを参照しているはずなんだ。
ためしに↓をコンパイル・実行してみてくれない?
#include <boost/thread.hpp>
#include <iostream>
using namespace std;
int main() { cout << BOOST_LIB_VESION << endl; }
0881871
2008/12/20(土) 19:37:14されていなかったんで、同梱のmakeファイルでビルドしたら、バージョン
は忘れたが、古いlibが生成されて似たようなエラーが出た記憶がある。
調べたら、makeファイル内部に記述されたバージョンが古いままだった
ので、テキストエディタで置換して再ビルドし直した。
この手のオープン系でいつも思うんだが、バージョンアップでデグレード
もしょっちゅうだし、何をどこまでテストしてリリースしているのか知らん
けど、たぶん他のVC++用もおそらく同じような状況なんじゃないの?
#pragmaのライブラリ指定はboost側のインクルードファイル内に記述が
あるんだと思われ。最近のDirectXなんかもそんな感じ(ソース内やリンカ
への直接指定が不要)になっているようだ。
0882870
2008/12/21(日) 01:17:51>>880
なるほど。
試して報告する
(週明けになっちゃうかも)
>>881
プロジェクトごとにいちいちlibファイル指定する手間は省けるけど、
肝心のマクロの出来がアレだと、逆にトラブルの元…ってことなのかな
(こっちの開発環境のせいって可能性も十分あり得るから、何とも言えないけど)
0883870
2008/12/21(日) 12:34:55#include <boost/version.hpp> にしてやってみた
(#include <boost/thread.hpp> の時点でコンパイルエラーになっちゃうので)
BOOST_VERSION 103401
BOOST_LIB_VERSION 1_34_1
でも C:\Program Files\boost\boost_1_36_0\boost\version.hpp では
#define BOOST_VERSION 103600
#define BOOST_LIB_VERSION "1_36"
になってるから、C:\Program Files\boost\boost_1_36_0\boost\version.hpp じゃなくてどこか別の所にあ るboost をincludeしちゃってるみたい。
0884870
2008/12/21(日) 12:35:31試しに真っ新なWindows XPにVS2005、boost 1.36.0だけ入れて試してみたら…
BOOST_VERSION 103600
BOOST_LIB_VERSION 1_36
と、正常。
(#include (boost/thread.hpp> もコンパイル通る。)
というわけで、
他のライブラリの内部で boost 1.34.1 使っているせいだということが判明。
(インテルコンパイラやら数値計算ライブラリやら使ってるので、まだどのライブラリが原因かは突き止めてないんだけど)
つまり悪いのはboostじゃなくて、こちらの環境でした。
レスくれた方々ありがとう。お騒がせしました。
0885デフォルトの名無しさん
2008/12/23(火) 01:15:460886デフォルトの名無しさん
2008/12/23(火) 04:33:54struct C : std::binary_function<Hoge, Hoge, bool> { bool operator()(const Hoge& lhs, const Hoge& rhs) const; };
としたときに,
boost::result_of<C(Hoge, Hoge)>::type;
と戻り値を得ようとすると,
"error C2027: 認識できない型 'boost::result_of<F>' が使われています。"
とエラーが出てしまいます.
Hoge が抽象クラスでないか,あるいは
boost::result_of<C(const Hoge&, const Hoge&)>::type;
とすればよいのですが,ライブラリ側(boost::ptr_list::sort)が
boost::result_of<C(Hoge, Hoge)>::type;
として呼び出してしまっているのでこのような変更はできません.
このようなときにはboost::result_ofを特殊化するしか方法はないのでしょうか?
それとも何かやりかたが間違っているのでしょうか?教えてください.
***次のコードでこの問題が発生します***
struct C { virtual void f() = 0; };
struct D : C { void f() {} };
struct compare : std::binary_function<C, C, bool> {
bool operator()(const C& lhs, const C& rhs) const {
return false;
}
};
boost::ptr_list<C> list;
list.sort(compare());
0887デフォルトの名無しさん
2008/12/23(火) 06:02:06A boost/libs/regex/test/regress/test_overloads.cpp
って行から先に進まない\(^o^)/
0888デフォルトの名無しさん
2008/12/23(火) 11:27:540889デフォルトの名無しさん
2008/12/23(火) 12:48:40>>865の人みたいに定期的にzipで上げてもらったものを落とすのがむこうもこっちも一番いい。
0890デフォルトの名無しさん
2008/12/23(火) 13:17:19分散型が好きな人ならどうぞ。
gitは下のリンクを参考にしてください。
毎日ちゃんとfollowされてます。
本体のコミット権がある人はコミットもできるみたい。
ttp://www.nabble.com/git-svn-conversion-td17677096.html
bzrはtrunk, releaseのブランチのみlaunchpadにあります。
bzr clone lp:~rigarash/boost/trunk
bzr clone lp:~rigarash/boost/release
でとれるはず。
0891デフォルトの名無しさん
2008/12/24(水) 06:58:42std::bynary_function<const C&, const C&, bool>
ではだめなの?
0892887
2008/12/24(水) 20:43:25原因判明。
>df
/dev/ (中略) 100%
(以下略)
\(^o^)/
vmware playerの容量の増やし方わかんないしー
proto使いたかっただけなんだけど、protoだけダウンロードしてきてboost以下に置いてもなんかいろいろ足りないみたいで、
じゃあ全部入れるかと思ったんだけど、むぅ。
0893デフォルトの名無しさん
2008/12/25(木) 12:42:39ヒント: devfs
0894デフォルトの名無しさん
2008/12/25(木) 19:06:40こういう使い方って、signalの本来の目的とはズレてますか?
0895デフォルトの名無しさん
2008/12/27(土) 01:50:15なぜ?何か理由がある?
0896デフォルトの名無しさん
2008/12/27(土) 02:09:410897デフォルトの名無しさん
2008/12/27(土) 02:13:51しろってことかな
0898デフォルトの名無しさん
2008/12/27(土) 14:46:00ttp://booster.x0.to/
0899デフォルトの名無しさん
2008/12/27(土) 15:37:060900デフォルトの名無しさん
2008/12/27(土) 16:57:21あれはテンプレート引数にデリータの型を入れる方法になってるね。
default_delete の場合は特殊化してポインタだけで済ませるんだろう。
0901デフォルトの名無しさん
2008/12/30(火) 17:51:01すまんけどこっちできかせてください
boost::shared_ptr< X > X::Add( boost::shared_ptr< X > x ) {
vec.push_back( x ) ;
return boost::shared_ptr< X >( x ) ;
}
int main(){
boost::shared_ptr< X > x1( new X ) ;
boost::shared_ptr< X > x2( new X ) ;
boost::shared_ptr< X > x3( new X ) ;
x1->Add( x2 ) ; ※
x1->Add( x3 ) ;
}
とやりたいんだけど、これだと※の時点でx1の文が終わった時点で
x1の参照カウントがゼロになってデリートされちゃいます。
Addの引数と戻り値はこのままでうまいことやる方法はありませんか?
0902デフォルトの名無しさん
2008/12/30(火) 18:08:52※の時点ではまだx1,x2,x3のshared_ptrは生きているのでは…?
0903デフォルトの名無しさん
2008/12/30(火) 18:09:040904901
2008/12/30(火) 18:12:12日本語変でした
※の文が終わるときにx1のデストラクタが呼ばれます
なのでその次の
x1->Add( x3 ) ;
を呼ぶときにx1が正しくないため落ちます
>>903
すいません今すぐは確認できません
0905デフォルトの名無しさん
2008/12/30(火) 18:14:42なんてコンパイラ使ってるんだ?
0906デフォルトの名無しさん
2008/12/30(火) 18:21:400908デフォルトの名無しさん
2008/12/30(火) 18:28:45お前の方で見直さない限り俺たちには何も言えないから。
0909デフォルトの名無しさん
2008/12/30(火) 18:34:010910デフォルトの名無しさん
2008/12/30(火) 18:34:090911901
2008/12/30(火) 18:42:34Releaseビルドだと落ちないけど期待された値になりません(vecのサイズがゼロ)
問題がなんなのかわからなくなってきました。すみません。
以下コード
#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
class X ;
typedef boost::shared_ptr< X > sp_X ;
class X {
public :
sp_X Add( sp_X x ) { vec.push_back( x ) ; return sp_X( this ) ; }
~X() { std::cout << "destructed" << std::endl ; }
void Show() { std::cout << vec.size() << std::endl ; }
private :
std::vector< sp_X > vec ; } ;
int main() {
sp_X x1( new X ) ;
sp_X x2( new X ) ;
sp_X x3( new X ) ;
x1->Add( x2 ) ;
x1->Show() ;
x1->Add( x3 ) ;
x1->Show() ;
}
実行結果
destructed
0
destructed
0
destructed
destructed
0912デフォルトの名無しさん
2008/12/30(火) 18:48:52おそらくreturn sp_X( this ) ;がいけない。
こういうことがやりたければ、enable_shared_from_this使え。
0913デフォルトの名無しさん
2008/12/30(火) 18:53:54これがダメ
shared_ptrのコンストラクタには基本的に new した直後のポインタか、
既に正しく生成されたshared_ptrのインスタンスしか渡しちゃダメ
二重deleteで何が起こってもおかしくない
0914901
2008/12/30(火) 18:54:37できました!
そこが怪しいとは思いましたが…そんなのがあるんですね。
勉強になりました。
他の方々もどうもありがとうございました。
0915デフォルトの名無しさん
2008/12/30(火) 18:55:50基本的にはそうしていましたが、thisを戻したいときどうすれば、と悩んでいました。
とにかくありがとうございます。
0916デフォルトの名無しさん
2008/12/30(火) 19:22:52thisがほしいときは以下を参照してね。
http://boost.cppll.jp/HEAD/libs/smart_ptr/sp_techniques.html
0917デフォルトの名無しさん
2009/01/02(金) 00:47:11メモリの再確保やノード生成時にメモリが足りなくて例外投げた際に
入れようとしたオブジェクトのメモリはリークするのですかしないのですか。
例えば、
boost::ptr_vector<int> v;
v.push_back(new int(2));
としたとき、new int が成功したけど
push_back する際のメモリ確保に失敗した場合に、
new int のメモリはリークする?
0918デフォルトの名無しさん
2009/01/02(金) 01:24:58ソース見れば分かるが、しない。
0919デフォルトの名無しさん
2009/01/02(金) 01:28:130920デフォルトの名無しさん
2009/01/02(金) 01:32:260921デフォルトの名無しさん
2009/01/02(金) 01:33:10リークすんじゃね?
0922デフォルトの名無しさん
2009/01/02(金) 01:33:20実験すればいいじゃん
0923デフォルトの名無しさん
2009/01/02(金) 01:38:260924デフォルトの名無しさん
2009/01/02(金) 01:49:37auto_ptrは便宜上だろ。別にリークするからじゃない
0925デフォルトの名無しさん
2009/01/02(金) 03:46:510926デフォルトの名無しさん
2009/01/03(土) 00:22:38ttp://booster.x0.to/
今回から、最新のドキュメント等を含むlibsフォルダも同梱する様に致しました。
0927デフォルトの名無しさん
2009/01/03(土) 04:59:360928デフォルトの名無しさん
2009/01/03(土) 05:29:190929デフォルトの名無しさん
2009/01/03(土) 05:34:590930デフォルトの名無しさん
2009/01/03(土) 05:46:010931デフォルトの名無しさん
2009/01/03(土) 05:49:460932デフォルトの名無しさん
2009/01/04(日) 17:03:45thread SS(&StartShread);
として渡したんですが、
error C2276: '&' : 仮想関数のアドレスを取ろうとしました。
とエラーが出てしまいます。Threadにはどういう形で渡せばいいんでしょうか?
ちょっとMFCの質問気味かもしれませんがお願いします。
0933デフォルトの名無しさん
2009/01/04(日) 17:15:40thread SS(boost::bind(&クラス名::StartShread, boost::ref(hoge)));
refを付けているのは、直接hogeを渡すとそのコピーが作られてそっちのStartShreadが呼ばれるため。
代わりに、hogeが自動変数ならスレッドが終わる前にhogeが死ぬことのないように気を付けろ。
0934デフォルトの名無しさん
2009/01/04(日) 17:15:570935デフォルトの名無しさん
2009/01/04(日) 17:45:100936デフォルトの名無しさん
2009/01/05(月) 08:52:27生関数ポインタの呼び出しに比べて4〜5倍遅くなるのね。
0937デフォルトの名無しさん
2009/01/05(月) 11:18:10むしろ4〜5倍で済むんだ?という感じ。
0938デフォルトの名無しさん
2009/01/05(月) 11:53:430939デフォルトの名無しさん
2009/01/05(月) 13:21:19思ったんだろうが、5倍超えるとなるとちょっと萎える。
あとfunctionのみでもbindと同じくらい遅くなるんだよね。
ただしfunctionにbindした関数を入れた場合でも、
さらに大幅に遅くなったりはしないのが不思議だった。
0940デフォルトの名無しさん
2009/01/05(月) 13:25:3910ns が 50ns になったからって、関数本体の処理が 10us あったらボトルネックにはなり得ない。
0941デフォルトの名無しさん
2009/01/05(月) 13:35:38具体的にはエミュレーターとか仮想マシンのオペコードの処理が
関数ポインタの配列になってた部分を、function+bindに変えたらなった。
0942デフォルトの名無しさん
2009/01/05(月) 13:37:06ちっとも具体的じゃないんだけど、その関数の処理は>940の書いている通り10usも掛かっていたのか?
0943デフォルトの名無しさん
2009/01/05(月) 13:41:400944デフォルトの名無しさん
2009/01/05(月) 13:58:15http://www.boost.org/doc/html/function/faq.html#id2914497
0945デフォルトの名無しさん
2009/01/07(水) 14:52:32http://vs-e.net/
0946デフォルトの名無しさん
2009/01/07(水) 18:06:44これってなんだ?
0947デフォルトの名無しさん
2009/01/07(水) 18:28:180948デフォルトの名無しさん
2009/01/07(水) 19:14:17結果version.hppの中で#define BOOST_VERSIONが10370になったのですが、やっぱりmpl/apply_if.hppが見あたりません。
grepで探してもapply_ifが見あたらないのですが、apply_ifは何をインクルードすれば使えるのでしょうか。
0949デフォルトの名無しさん
2009/01/07(水) 19:21:44> The apply_if metafunction has been renamed to eval_if.
0950デフォルトの名無しさん
2009/01/07(水) 19:28:210951デフォルトの名無しさん
2009/01/09(金) 19:07:44ttp://booster.x0.to/
今回から、DocBook形式のドキュメントもビルドし同梱する様に致しました。
0952デフォルトの名無しさん
2009/01/10(土) 11:30:14http://pc11.2ch.net/test/read.cgi/tech/1231080841/
0953デフォルトの名無しさん
2009/01/10(土) 11:40:360954デフォルトの名無しさん
2009/01/10(土) 17:00:400955デフォルトの名無しさん
2009/01/10(土) 17:05:28つreverse iterator
0956デフォルトの名無しさん
2009/01/10(土) 17:11:54boost::regex reg("[0-9a-zA-Z]");
boost::match_results<std::string::iterator> results;
regex_search(str.rend(), str.rbegin(), results, reg);
て事ですよね、なんかコンパイル通らなくて・・・て思ったら
boost::match_results<std::string::iterator> results;
ぢゃなくて
boost::match_results<std::string::reverse_iterator> results;
だった・・・。こんな事で1時間はまるとは・・・・・orz
ありがとうorz
0957デフォルトの名無しさん
2009/01/10(土) 17:17:320958デフォルトの名無しさん
2009/01/10(土) 18:59:190959デフォルトの名無しさん
2009/01/10(土) 19:16:12たとえば_1+3とか書くとlambda_functorの中でplus_actionが呼ばれるように理解しましたが、
これは要するに、コンパイラが+演算子を適用する代わりにplus_actionというファンクタを勝手に呼び出してくれてるということですよね。
ということは、(_1%2)*2みたいに書くと二段階にファンクタを呼ぶ=関数ポインタを二回探しに行くという理解で正しいでしょうか?
もしそうならpod型なんかが相手だともったいないと思うのですが、コンパイル時の最適化で吸収してくれてたりするのでしょうか。
なんだか書いていてスレ違いなんじゃないかって気もしてきましたが、よろしくお願いします。
0960デフォルトの名無しさん
2009/01/10(土) 19:24:19最適化してくれるかどうかなんてコンパイラ依存だろう。
特定の実装について知りたいなら試せばいい。
0961デフォルトの名無しさん
2009/01/10(土) 19:36:11デバッガの使い方いまいち理解できてないんですが、簡単なコードで奮闘してみます。ありがとうございました。
0962デフォルトの名無しさん
2009/01/12(月) 16:15:240963デフォルトの名無しさん
2009/01/12(月) 16:18:020964デフォルトの名無しさん
2009/01/12(月) 17:53:09アホだろこれ
0965デフォルトの名無しさん
2009/01/12(月) 18:16:22話はそれからだ
0966デフォルトの名無しさん
2009/01/12(月) 18:28:08「error C2371: '`anonymous-namespace'::boost_serialization_guid_initializer_23' : 再定義されています。異なる基本型です。」
とエラーが出るんだよ。ウンコだ
//////////////////////////////////
// Bar.h 派生
#include <boost/serialization/base_object.hpp>
class Bar : public Foo
{
public:
Bar(void);
~Bar(void);
private:
friend class boost::serialization::access ;
template<class Archive> void serialize( Archive& ar, const unsigned int version )
{
ar & boost::serialization::base_object<Foo>(*this) ;
}
} ;
BOOST_CLASS_EXPORT( Bar ) ;
0967デフォルトの名無しさん
2009/01/12(月) 18:28:45//////////////////////////////////
// Foo.h 基底
class Foo
{
private:
friend class boost::serialization::access ;
template<class Archive> void serialize( Archive& ar, const unsigned int version )
{
ar & m_hoge ;
}
} ;
0968デフォルトの名無しさん
2009/01/12(月) 19:21:18実装をcppのほうに移したらコンパイルが通った。
0969デフォルトの名無しさん
2009/01/12(月) 20:46:530970デフォルトの名無しさん
2009/01/15(木) 10:31:43int func(int n1,int n2){
return n1 + n2;
}
std::tr1::function<int(int)> pFunc;
pFunc = bind(&func,20,_1)
↑これは出来るのですが
pFunc = bind(&func,20,_2)
↑これが出来ません。
第二引数を固定するbindはどう記述すればよいでしょうか?
0971デフォルトの名無しさん
2009/01/15(木) 10:42:16根本的に間違って覚えてないか?
pFunc = bind(&func,_1,20);
でやってみ
0972デフォルトの名無しさん
2009/01/15(木) 12:43:44突っ込まれるのが恐い・・・・
0973デフォルトの名無しさん
2009/01/15(木) 13:40:510974デフォルトの名無しさん
2009/01/15(木) 21:23:030975デフォルトの名無しさん
2009/01/16(金) 02:46:580976デフォルトの名無しさん
2009/01/16(金) 02:47:300977デフォルトの名無しさん
2009/01/16(金) 09:12:28ネタにマジレス乙
0978デフォルトの名無しさん
2009/01/16(金) 21:11:08ttp://booster.x0.to/
0979デフォルトの名無しさん
2009/01/17(土) 00:30:51ttp://boooster.x0.to/
0980デフォルトの名無しさん
2009/01/17(土) 03:54:54(実装)ttp://cvs.sourceforge.jp/view/siki/siki/src/holder.hpp?view=markup
(使い方)ttp://cvs.sourceforge.jp/view/siki/siki/src/test/test_holder.cpp?view=markup
上半分がboost::any用ね。
トランポリン関数を事前に登録しなきゃいけないのがちょっと面倒なんだけど、なんか上手い回避方法ある?
0981980
2009/01/17(土) 16:14:37上記をポリシーベースに分割してみました。
誰かトランポリン関数の上手い処理の仕方を教えてくれぇ……
0982デフォルトの名無しさん
2009/01/17(土) 22:50:13でも、派生させるとデストラクタがpublicになってしまうので罠を素通りしてしまいます。deleter指定を忘れないいいようにする方法はありませんか。
#include <boost/shared_ptr.hpp>
using namespace boost;
class Disposable
{
protected:
virtual ~Disposable(){}
virtual void Dispose(){}
public:
static void deleter(Disposable* Obj)
{
Obj->Dispose();
delete Obj;
}
};
class Disposable2 :public Disposable{};
int _tmain(int argc, _TCHAR* argv[])
{
shared_ptr<Disposable> a1(new Disposable(),Disposable::deleter);//エラーにならない OK
shared_ptr<Disposable> a2(new Disposable());//エラーになる ok
shared_ptr<Disposable> a3(new Disposable2(),Disposable::deleter);//エラーにならない OK
shared_ptr<Disposable> a4(new Disposable2());//エラーにならない。bad !!!!!!!
Disposable a5;//エラーになる ok
return 0;
}
0983980
2009/01/17(土) 23:27:08一番簡単なのは、生でコンストラクトするのは禁止して必ずcreate関数で拵えるようにするのじゃない?
class Disposable {
protected:
void Dispose(){};
~Disposable(){};
struct Deleter {
template<typename T> void operator()(T* target) {
target->Dispose();
delete target;
};
};
public:
static shared_ptr<Disposable> create() {
return shared_ptr<Disposable>(new Disposable, Disposable::Deleter());
};
};
class Disposable2 : public Disposable {
public:
static shared_ptr<Disposable2> create() {
return shared_ptr<Disposable2>(new Disposable2, Disposable::Deleter());
};
};
0984デフォルトの名無しさん
2009/01/17(土) 23:31:40class Disposable {
protected:
Disposable(){};
~Disposable(){};
void Dispose(){};
struct Deleter {
template<typename T> void operator()(T* target) {
target->Dispose();
delete target;
};
};
public:
static shared_ptr<Disposable> create() {
return shared_ptr<Disposable>(new Disposable, Disposable::Deleter());
};
};
class Disposable2 : public Disposable {
private:
Disposable2(){};
~Disposable2(){};
public:
static shared_ptr<Disposable2> create() {
return shared_ptr<Disposable2>(new Disposable2, Disposable::Deleter());
};
};
Disposableを抽象クラスにしないのはなんか気になるなぁ……
0985デフォルトの名無しさん
2009/01/18(日) 01:12:110986デフォルトの名無しさん
2009/01/18(日) 01:51:03各クラスでcreateを実装し忘れると痛い目に会うけど、newする毎に気を付けるよりはよっぽどマシ。
0987デフォルトの名無しさん
2009/01/18(日) 02:40:14delete時にcreateを通してないかチェックできるようにすれば多少安全になるんでは
レス数が950を超えています。1000を超えると書き込みができなくなります。