Boost総合スレ part6at TECH
Boost総合スレ part6 - 暇つぶし2ch1:デフォルトの名無しさん
08/04/09 23:04:01
過去スレ
part 5 スレリンク(tech板)
part 4 スレリンク(tech板)
part 3 スレリンク(tech板)
part 2 スレリンク(tech板)
part 1 スレリンク(tech板)

■関連サイト■
Boost C++ Libraries
URLリンク(www.boost.org)

Boost 翻訳プロジェクト
URLリンク(boost.cppll.jp)

Let's Boost
URLリンク(www.kmonos.net)

boost info
URLリンク(shinh.skr.jp)

2:デフォルトの名無しさん
08/04/09 23:05:30
■関連書籍■
Boost C++ Libraryプログラミング
URLリンク(www.amazon.co.jp)

Beyond The C++ Standard Library
URLリンク(www.amazon.co.jp)

C++ Template Metaprogramming
URLリンク(www.amazon.co.jp)

The Boost Graph Library
URLリンク(www.amazon.co.jp)

■関連スレ■
C++相談室 part61
スレリンク(tech板)

C++0x 3
スレリンク(tech板)

【C++】STL(Standard Template Library)相談室 9
スレリンク(tech板)

3:デフォルトの名無しさん
08/04/09 23:06:26
Loki
URLリンク(sourceforge.net)

JTC1/SC22/WG21 - The C++ Standards Committee
URLリンク(www.open-std.org)

POCO, the C++ Portable Components
URLリンク(www.appinf.com)
URLリンク(sourceforge.net)

The unofficial BCB Boost patches
URLリンク(bcbboost.sourceforge.net)

4:デフォルトの名無しさん
08/04/09 23:08:42
乙だけど

boobsを語れゴルァ boost::array<part, 6>
スレリンク(tech板)

boobsが気に入らなかったのか

5:デフォルトの名無しさん
08/04/09 23:10:44
検索できなかったから素で立てたに1票。
スレタイ違いは正直致命的だと思うので
立て直しは仕方が無い気がする。

6:デフォルトの名無しさん
08/04/09 23:16:43
>boobs
確かにおっぱいは好きだが、タイポは嫌いだしいいんじゃね。

7:デフォルトの名無しさん
08/04/10 13:30:28
boostを全部ビルドしようと思って
bjam --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
の部分をなくせばコンパイルが始まるんだけど,このオプション指定は外しても問題なし?

8:デフォルトの名無しさん
08/04/11 19:23:02
runtime-link=static,shared
こんな風に複数指定できるの?
おれはいつもこんな風に指定しているんだけど。

runtime-link=static runtime-link=shared


9:デフォルトの名無しさん
08/04/12 16:06:46
そもそもlinkとruntime-linkってどう違うの?

10:デフォルトの名無しさん
08/04/12 16:12:11
>>9
まったく別物。
linkは、スタティックリンク(lib)とダイナミックリンク(dll)をビルドするかどうか。

runtime-linkは、CRTのランタイムライブラリをスタティックリンクするか、ダイナミックリンクするかどうか。
例えばVCの場合、runtime-linkをsharedにした場合は、dllも一緒に配布しなければならない。

11:デフォルトの名無しさん
08/04/12 16:33:46
その場合配布しなければならないdllってMSVCRTのこと?
知らなかった

12:デフォルトの名無しさん
08/04/15 00:34:17
Asioはビルド不要と喜んでいたら、
Systemを使っていた/(^o^)\

13:デフォルトの名無しさん
08/04/15 05:37:31
チラシの裏!
1.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は問題無さそう、たぶん。

14:デフォルトの名無しさん
08/04/15 09:00:21
>>12
asio良いよな

15:デフォルトの名無しさん
08/04/18 02:14:33
boost::mt19937をつかってクラスを作ったのですが、これをつかうとコンパイル時に以下のワーニングが出ます。
ソースをみたのですが、、、よくわかりませんでした。どなたかワーニングが出る理由を教えてください。
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をとると出ません。
どうかよろしくお願いします。

16:デフォルトの名無しさん
08/04/18 09:17:47
-O3だと最適化のためにチェック項目が増えるから警告が出るんだな。
警告の内容を読めば判るとおり、初期化前に値を参照している怖れがある。
問題ないプログラムを書いているなら無視してOK。

17:デフォルトの名無しさん
08/04/18 22:39:28
>>16
ありがとう。問題ないプログラムだと思うので、とりあえずこのままでやっときます。


18:デフォルトの名無しさん
08/04/21 19:10:24
久々にSVN更新かけてみたら何かspirit関連一斉に変わった?

19:デフォルトの名無しさん
08/04/21 19:11:13
spirit.v2

20:デフォルトの名無しさん
08/04/21 21:12:45
v2になったのか!
目玉機能とかあるのかな?

21:デフォルトの名無しさん
08/04/22 12:30:39
良く見ていないが以前から計画のあったphoenix統合が実施されてるっぽい?

22:デフォルトの名無しさん
08/04/29 02:05:02
boost1.35 を VC++7.1 でビルドしようとしたら
LNK1104: コンパイラは、ファイル 'libboost_filesystem-vc71-sgd-1_35.lib' を開くことができません。
と出た.誰か助けて
インクルード方法は
#include "boost/filesystem/fstream.hpp"
で,VC++のオプションでインクルードファイルに
c:\..\boost
と設定しています

23:デフォルトの名無しさん
08/04/29 02:28:29
bjam使っとけば

24:デフォルトの名無しさん
08/04/29 16:37:41
今ごろは.libがboostに必要なの?

25:デフォルトの名無しさん
08/04/29 16:51:12
もしかして「今時は」と「この頃は」が混ざったか?

26:デフォルトの名無しさん
08/04/29 17:10:24
リンカオプションも知らずにboostをビルドですか

27:デフォルトの名無しさん
08/04/29 17:11:54
「今頃は」という言葉もあると思った

>>22
構成プロパティ>リンカ>全般>追加のライブラリディレクトリ
に(boostのディレクトリ)\libsを追加
そうすればVC++ではboostがオートリンクしてくれる

それはともかくスタティックリンクの仕方も分からず
ヘッダのインクルードと混同しているのにboostを使うのは無謀と思うんだが……
まあ並行して学んだ人もいるかもしれないけど
あと「boostをビルド」じゃなくて「boostを使ったプロジェクトをビルド」だろう。多分

28:デフォルトの名無しさん
08/04/29 18:31:31
>>27
boostビルドしなきゃライブラリができないじゃないか


29:27
08/04/29 18:54:50
あ、1.35はWindows用インストーラはまだないのか……
初心者がbjamなしでわざわざビルドするのはもっと無謀だろ……

30:22
08/05/01 08:36:22
すみません色々見直したんですが
bjam は 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 としています.
何がいけないのか自分だけではよくわかりません.どうかご教示いただけないでしょうか?


31:デフォルトの名無しさん
08/05/01 09:12:28
>>30
まずはそのlibファイルがあるか確認しよう。


32:デフォルトの名無しさん
08/05/01 12:04:44
bjamのオプションをちゃんと指定しないと
足りないライブラリがあるからねぇ。
1.34.1からオプションが変わってたので、
自分も何度かビルドし直しました。

33:デフォルトの名無しさん
08/05/01 19:40:22
>>30
URLリンク(www.boost-consulting.com)
まずは1.34.1インストーラを使ってみたらいいんじゃないかな?

34:デフォルトの名無しさん
08/05/02 05:34:02
>>22
>>7>>8を夜魅魔症

35:22
08/05/03 00:37:26
>>31
確認したところ,-sgd- 付きの lib ファイルはありませんでした.
情けないことに指摘されるまでずっとあると思っていました.
>>34
シングルスレッド向けlibファイルを作るオプションコマンドを色々な形で実行してみても
fail update と出て -sgd- ファイルが作られることはありませんでした.
他にもboostの全てをビルドするしたという方と同じコマンドを実行してもやはりfail updateと出て生成されることはありませんでした.
>>33
var1.34.1インストーラを使い,var1.35 とは別に filesystem を生成し,プロジェクトもそれに合わせて設定しなおしたところプロジェクトのビルドはすんなりと通りました.
初めて boost を使うのでもう最新版であることにこだわらず var1.34.1 を使うことにしました.
解決せずに終わることにすっきりしないでもないですが,余裕もないのでこれで質問を終わります.

レスしてくれた方々,ありがとうございました.解決せずに〆ることになり申し訳ございません.

36:デフォルトの名無しさん
08/05/03 13:15:00
世の中にグラフ構造のデータは沢山あるけど
boost.graph
を活用している人いますか?
ちょっとしたデータなら自分で自前グラフデータ作ったほうがいいのか
その辺のしきいってどのあたりなんだろ


37:デフォルトの名無しさん
08/05/03 19:00:59
インストーラ版がわけ分からなくて,
Let'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のビルド・実行が成功しました.

補足要求とか,誤解指摘などあればどうぞ.

38:デフォルトの名無しさん
08/05/03 19:14:30
というかなんでいまさらになって、Boostのインストールの話ばかりなんだ。
インストールなんて難しくないだろ。
SVNからHEAD引っ張ってきてbjamでビルドするだけだろ。


39:デフォルトの名無しさん
08/05/03 19:22:32
使ってみようっ人がが増えたんだからいいじゃないか。

40:デフォルトの名無しさん
08/05/03 19:35:08
>>38
Win32環境だと使ってるコンパイラによって困ったりするのと
一番こまっちゃうのはVSのバージョン複数同時インストールしてるとワケワカメになる事だと思う。

unix系とりあえず自分の使ってるシステムでは問題でなかった。


41:デフォルトの名無しさん
08/05/03 19:48:15
いや、それほど困るか?
俺はstageディレクトリを作っているが、要するにVSのバージョンに合わせて、
stageディレクトリを複数用意すればいいだけの話だろ。
VSがひとつだけだとしても、32bitコードと64bitコードがあるが。

42:デフォルトの名無しさん
08/05/03 21:32:30
boost便利なんだけどバイナリサイズが凄い勢いで大きくなってくんだよなぁ

43:デフォルトの名無しさん
08/05/03 23:09:24
さっさとC++の標準になってもらいたいもんだな

44:デフォルトの名無しさん
08/05/03 23:32:34
というかlambdaが標準入りで大幅に書き直しを迫られるものが多いかと…
さらにtraits→concept。

どちらも下方互換性が失われるわけじゃないから、
boostに留まるならすぐに直す必要はないけど、
標準入りするには必須かと。

45:デフォルトの名無しさん
08/05/04 00:18:24
VCバージョン違いに加えてstlport使ってると更にややこしい
何とかビルドするのに1週間も掛かってしまったぜ

46:デフォルトの名無しさん
08/05/04 04:59:13
インストーラー出るのいつも遅いけど作るのそんな時間かかるもんかね?

47:デフォルトの名無しさん
08/05/05 11:03:59
最近のboostは

./configure
make
checkinstall (以前のバージョンだとここでこけた)

できるな。

48:デフォルトの名無しさん
08/05/10 13:45:05
>36
Boost Graph はグラフデータを表す方がメインじゃなくて、汎用的に使えるグラフ上のアルゴリズムの方がメインだと思う。
自前でグラフデータ作るなら Boost Graph に渡せるようにしとくと便利、みたいな。
ちょっとしたデータの方こそ adjacency_list とか使ってさくっと済ませて、速度なり機能なり必要な要件があるなら
それに適したデータを作るなり、アダプタ書くなりする方がいいんじゃないかと思う。

49:デフォルトの名無しさん
08/05/11 17:51:55
.hpp がきもちわるくて Boost つかってない
なんだよ Header++ って。ヘッダ仕様自体は変わってないつーのwwww

50:デフォルトの名無しさん
08/05/11 17:52:51
そうかそうか

51:デフォルトの名無しさん
08/05/11 17:52:59
中身がCなヘッダとC++なヘッダを区別したいお
と思ったことが一回ぐらいない?

52:デフォルトの名無しさん
08/05/11 18:58:05
.hpp って読むときどうしてもドットフププって読んじゃうんだよね。

53:デフォルトの名無しさん
08/05/11 19:12:19
>>49
でもこの分野、既存の用語の「反対の意味」とか「○○バージョン」を意味したいだけの造語、
結構多いでしょ。
ソフトウェアだって、単にハードウェアとの対比で生まれただけで、別に
ソフトウェアの何かがsoftだからそう呼ばれるようになったわけじゃないし。

54:デフォルトの名無しさん
08/05/11 23:41:02
そもそもBoostのヘッダの拡張子が.hだったとしても、
どうせ49は別の難癖付けてBoostを使わないと思う。

はっきりとBoost使ったコードはきもいから嫌だとか
正々堂々と言うほうがかえってすっきりした気分になれる、たぶんお互いに。

55:デフォルトの名無しさん
08/05/12 00:00:57
大体、拡張子が気に入らないから使わないとかおかしいだろw

56:デフォルトの名無しさん
08/05/12 00:17:00
標準ライブラリは拡張子が無いので使いませんw

57:デフォルトの名無しさん
08/05/12 03:46:35
hppって昔からあるような

58:デフォルトの名無しさん
08/05/12 04:34:00
hppもHもhhもhxxもh++も大昔から普通にあります。
ただ>>49が誰かに構ってほしかっただけです。
気にしないで下さい。

59:デフォルトの名無しさん
08/05/12 13:47:23
うざ

60:デフォルトの名無しさん
08/05/12 14:00:36
.cxxって何だよw と思ったことならある

61:デフォルトの名無しさん
08/05/12 14:06:30
>>60
xx が ++ を英字で模倣したものだと気付くのに時間かかった。
Makefile とかは大文字で普通に使ってるから余計わかりにくい。

62:デフォルトの名無しさん
08/05/12 17:23:27
C++コードからしか使われないヘッダの拡張子は .h を使わないで欲しい
Cからも使えるヘッダなら .h でいいけど

63:デフォルトの名無しさん
08/05/12 17:32:07
boostベースの数値計算library
opentissue
が便利

64:デフォルトの名無しさん
08/05/13 06:25:23
CとC++の区別が付かない人がいるのか
そんな人がCとC++を使ったら「CっぽいC++」と「C++」を書くんだろうな

65:デフォルトの名無しさん
08/05/13 06:56:22
逆だろ。CとCっぽいC++じゃね。

66:デフォルトの名無しさん
08/05/13 08:13:29
ビャーンの本では .h を使ってるという理由だけで .h を使ってる。
boostのfaqに書いてある理由も理解できるので、別に .hpp に嫌悪感を抱くこともない


拡張子ネタとは関係ないけど、いくらビャーンの本で推奨されてもさすがにプログラミング環境でプロポーショナルフォントを使うのはナイ

67:デフォルトの名無しさん
08/05/13 08:19:58
そうか?
普通にプロポーショナルフォントを使っているが。

68:デフォルトの名無しさん
08/05/13 10:51:26
boost::formatに関する質問です。

Boost1.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

となってしまいます。

69:デフォルトの名無しさん
08/05/13 10:52:22
(続き)
一応、

①.\boost\format\parsing.hpp の400行目(parseメソッドの最初)に

clear();

を追加。

②.\boost\format\format_implementation.hpp の行目(clearメソッドの最初)に

prefix_.resize(0);

を追加。

とすることで

abcd 1
efgh 2

と出力されるようになるのですが、この修正だけで問題ないのか心配です。
(ちなみに1.3.5.0のソースもDLして確認してみましたが、該当するような処理はありませんでした。)

まぁそもそもformatオブジェクトを使いまわしたところで大してパフォーマンス上がるわけではないんですがw

宜しく御願いします。

70:デフォルトの名無しさん
08/05/13 15:07:22
lambdaでPOD型扱うのに記述がめんどいんで

#define mem_of_1(Type, MemberName) (&_1->*&Type::MemberName)
#define mem_of_2(Type, MemberName) (&_2->*&Type::MemberName)

みたいにして使ってるんだが、こういうの標準でも定義してもらえないものか・・・
オレ定義だと可搬性に欠けるのが難点で。

71:デフォルトの名無しさん
08/05/13 15:13:16
>>64
何か線を引きたいようだけど C++ コンパイラで便利な C という位置づけもあるんじゃないか。
抽象化にこだわって変なソース書く人もいるわけだろ?
ようはスマートに処理をこなせるかということではないかな。

72:デフォルトの名無しさん
08/05/13 15:13:23
>>66-67
できればプロポーショナルフォントを使いたいが、
そこら辺のフォントだとプログラミングには使いづらい。
ピリオドやカンマ、セミコロンが小さすぎる。ゼロには斜線が欲しい。

どこかプログラマのためのプロポーショナルフォントなんて出してくれないものか。

73:デフォルトの名無しさん
08/05/13 15:49:38
>>70
boost-devel ML
にコード投稿したら
多分とりこんでもらえる

74:デフォルトの名無しさん
08/05/13 17:15:20
>>70
URLリンク(www.boost.org)
でがまんしる

75:デフォルトの名無しさん
08/05/13 18:11:19
>>72
VC6とかに入ってるFONTEDITで自分で作ればいい。
90文字程度作ればあとはフォントリンクして終わりだから簡単だぞ。

76:75
08/05/13 18:32:39
ごめん、Win環境限定ならね。

77:デフォルトの名無しさん
08/05/13 21:02:53
プロポーショナルフォントでプログラムに困るようなうんこ環境は
Windows だけなので問題ない。

78:デフォルトの名無しさん
08/05/13 21:23:30
つまんね

79:デフォルトの名無しさん
08/05/14 07:18:51
>>71
CっぽくてもC++で作られたライブラリはCじゃ使えないから線引きは必要だ

80:デフォルトの名無しさん
08/05/19 09:47:56
Emacs使いな人、もしいたらこれでboost使っても
補完が働くか試してみないか?
URLリンク(cedet.sourceforge.net)

81:デフォルトの名無しさん
08/05/19 17:37:45
#include <boost/array.hpp>
#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();
  }
};

URLリンク(hw001.gate01.com)
ここを見て、boost::array.c_array()で生の配列を取り出してシリアライズしようと思ったのですが、
error C2679: 二項演算子 '&' : 型 'int *' の右オペランドを扱う演算子が見つかりません (または変換できません)。
というエラーが出てしまいました。
どうやればシリアライズできますか?

82:デフォルトの名無しさん
08/05/19 20:56:44
ar & data.elems;でどうよ。

83:81
08/05/20 13:03:27
>>82
thx
コンパイル通りました。
データがpublicに置いてあるとは盲点でした。

連続で申し訳ないですが、もう1つ質問させて下さい。
Let's Boostで解説されているフルインストールをしたんですが、
ライブラリを必要とするboostを使ったものをビルドするとリンクエラーが出てしまいます。

例えば、
URLリンク(www.kmonos.net)
このサンプルをビルドすると、
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でエラーが出るということは、
ライブラリへのパスが通ってないわけじゃないと思うんですが、原因はどこにあるのでしょうか?

84:デフォルトの名無しさん
08/05/20 19:38:03
CRTの設定(静的LIBかDLLか)が食い違っているとそんなエラーが出た気がする。

85:デフォルトの名無しさん
08/05/20 20:38:55
VC2008でビルドするためのパッチを当てる必要があるかもしれない気がする。

86:83
08/05/21 08:34:22
>>84
いろいろ変えてみたら、/MTでlibboost_serialization-vc80-mt-gd-1_34_1.libでのエラーが消えましたが、
a.objでのエラー7個が残ったままです。
>>85
すみません、詳しくお願いします。
環境はVC2008EEです(書き忘れてましたすみません)。

87:デフォルトの名無しさん
08/05/21 08:39:25
>>86
URLリンク(www.nabble.com)

88:デフォルトの名無しさん
08/05/21 12:41:54
>>80
たしか設定済みmeadowに入ってたよね
meadowとVisual Studio組み合わせられると便利なんだけどね

89:83
08/05/21 14:38:36
thx
よく理解しないまま、
URLリンク(www.nabble.com)
に書かれているコードをそれぞれのファイルの末尾に追加してみました。
そして、例のサンプルをビルドしたらエラーは、
C:\Library\boost_1_34_1\boost/config/compiler/visualc.hpp(180) : fatal error C1189: #error :
"Compiler not supported or configured - please reconfigure"
の1つになりました。
うーん、自分の知識が足りないか・・・。

90:デフォルトの名無しさん
08/05/21 16:51:34
>>89
おそらくVC8の設定でライブラリをビルドしてしまっているから
VC9EEの設定で構築しなおす必要がある。
そのURLに載っているファイル4つを編集してbjam --toolset=msvc-9.0すればいい。

>ファイルの末尾に追加
差分の見方がわからないならdiff unifiedでぐぐれ

つーか1_35_0使えばいいんじゃないのか?

91:83
08/05/21 21:10:39
>>90
1_35_0を入れたら、すんなりビルドできました。
最新版を確認するべきだったorz
ありがとうございました。

92:デフォルトの名無しさん
08/05/24 14:55:48
BGLを使い始めたのですが、adjacency_listについて質問があります。
adjacent_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


93:デフォルトの名無しさん
08/05/24 18:20:21
>このイテレータはSTLのRandomAccessIterator要件を満たす
どこに書いてあります?

OutEdgeList を setS で設定しているので,
RandomAccessIterator の要件は満たさないと思いますよ.

94:デフォルトの名無しさん
08/05/25 09:06:16
>>93

URLリンク(www.boost.org)
の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+()が定義されていなくても
当然なのですが、ちょっと混乱しています。


95:デフォルトの名無しさん
08/05/25 10:13:04
>>94
adjacency 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 かを投影するだけ,というのが正しいのではないかと.

96:95
08/05/25 10:14:21
>>94
それから adjacency_list の adjacency_iterator は
別に adjacency_iterator_adaptor で実装されているとは限らないので,
読むべきドキュメントは adjacency_iterator_adaptor のドキュメントではなくて
あくまで adjacency_list のドキュメントかと思います.

ただ, adjacency_list において adjacency_iterator と out_edge_iterator が
どの iterator concept のモデルなのかの関係については,
↑の議論が踏襲されるのが自然とは思います.
そして現に, Adjacency List のドキュメント
URLリンク(www.boost.org)
では, "The adjacency_iterator models the same iterator concept as out_edge_iterator. " と
書いてあります.

97:95
08/05/25 10:20:15
なので結論としては,
>>92 で adjacency_list の OutEdgeList テンプレートパラメタに setS を指定しているので,
out_edge_iterator は Bidirectional Iterator concept のモデルになり,
従って adjacency_iterator も Bidirectional Iterator concept のモデルなので,
>>92 のランダムアクセスではコンパイルが通らないのだと思います.

98:92
08/05/25 13:45:24
詳細にわたって解説していただきありがとうございます。おっしゃる通り、
まずadjacency_listの解説をよく読むべきでした。

OutEdgeListにsetSを使っているのは、エッジの重複を許したくないと
いうのが理由でした。グラフを読み込む際にエッジの重複をチェック
するようにして、OutEdgeListにはRandomAccessIteratorにするように
すればいいのかとも思いますが、そうするとエッジに対する各操作の
時間複雑度も変わってきてしまい、なかなか悩みどころですね。
よく考えてアルゴリズムを実装します。


99:デフォルトの名無しさん
08/05/31 16:38:48
なんか最近の.NETの中身見てると、Boostが隠ぺいされてそうな雰囲気がするな

100:デフォルトの名無しさん
08/05/31 16:44:17
時代がBoostに追い付いてきたって事か

101:デフォルトの名無しさん
08/06/01 21:59:24
VC++2008EEでboostを使ってみようとboost_1_35_0_setup.exeを使ってインストールしました。
しかし実際に使ってみると「定義されていない識別子です。」と言うエラーが出てコンパイル出来ません。
パスが通っていないのかと思い、以下のように通してみましたが駄目でした。
インストールしたライブラリのタイプ(?)はマルチスレッドとマルチスレッドデバックのみです。

実行ファイルパス…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

102:デフォルトの名無しさん
08/06/01 22:02:07
問題が起きる最小限のソースコードplz

103:デフォルトの名無しさん
08/06/01 22:30:24
エラーメッセージくらい貼ろうよ

104:101
08/06/01 23:00:03
すみません、boost::の付け忘れが原因でしたorz

105:デフォルトの名無しさん
08/06/02 01:07:46
微妙にすれ違いだけど、Lokiってあんまり使われてないのかな。

106:デフォルトの名無しさん
08/06/02 07:33:20
先駆的なライブラリで、(in "Modern C++ Design")
あれの機能は他に取り込まれているから。


107:デフォルトの名無しさん
08/06/02 12:19:38
おお!そうなんだ。取り込まれ先はBoost?

108:デフォルトの名無しさん
08/06/02 20:35:06
今日初めてBoostを導入してSVNからのビルドも一応出来たんだけど、
Bjam+MSVC9でビルドに数時間掛かる。
コマンドプロンプトを見ると、暫く止まって・急に動いての繰り返しでCPUメータを見ても殆ど動いてない。
CPUを100%使い切って構わないのでさっさとビルドを済ませるオプションはありませんか?

109:デフォルトの名無しさん
08/06/02 20:46:29
HDDがボトルネックという可能性は?

110:デフォルトの名無しさん
08/06/02 20:50:07
ボトルネックというより不調発生してトライ&エラー多発してるんでは?

111:デフォルトの名無しさん
08/06/02 21:37:51
HDDはAHCI接続のWD7500AAKSで、空き容量も110GB程度あります。
CPUは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です。

112:デフォルトの名無しさん
08/06/02 21:49:14
>>111
監視ログにHDDの不調でてないか?


113:デフォルトの名無しさん
08/06/02 21:55:19
>>111
core2Quad 2,4G 2Gbyteだけど全然かからなかったなあ。
今bin.v2とstageタイムスタンプ見たら10分ぐらいしか幅がない。
CPUメータ上がらないのは変だね。ウイルス対策ソフトとか遅くないか?

114:デフォルトの名無しさん
08/06/02 22:57:24
Event Viewerを見てもそれらしきエラーはありません。
VS2008EEをGUIで立ち上げて他のプロジェクトをビルドするときは4コアを100%使い切って
数分で終わるのですが・・・。22時53分現在のビルド数は102個、大量のWarningはC4819(ソースの文字コード絡み?)です。
動作的にはC4819大量発生→20~30秒程沈黙の繰り返しで、HDDへのアクセスは常に続いていますが動作が散発的です。
セキュリティ関係はVista標準のFirewallのみでDefenderは切ってあります。
Boostの本題と関係無い話でスレを潰すのもあまり好ましくないと思いますので、
似た事例が無いかネット上を探してみます。


115:デフォルトの名無しさん
08/06/03 00:59:14
ビルド終わりました。
214ファイルで4時間15分・・・orz

116:デフォルトの名無しさん
08/06/03 20:04:34
SVNクライアントの設定が変なんじゃね
逐一リポジトリの最新版チェックしてるとか

117:デフォルトの名無しさん
08/06/04 01:50:21
set CL=/wd4819
環境変数CLに登録しておくと文字コードの警告表示されなくてすむよ

118:デフォルトの名無しさん
08/06/04 02:23:24
それより警告の原因をどうにかしたほうが良いんじゃないかな。
文字が化けてそれ以降のコードが滅茶苦茶になってた事があったから。

119:デフォルトの名無しさん
08/06/04 02:43:08
>>117
有難うございます。感謝感激です。
CLに/wd4819をセットしたらビルドが22分で終わりました。CPU使用率も30%前後まで上がりました。
大量のC4819が原因だったみたいです。

警告の原因は多分これでしょうか。
ネットで調べてみるとVisual StudioにはUTF-8Nを読めずC4819を誤検出するバグがあるらしく、
一部のファイルをUTF-8で保存し直せば黙るみたいです(まだ試していません)。
URLリンク(www.ccm.media.kyoto-u.ac.jp)


120:デフォルトの名無しさん
08/06/04 03:10:33
ビルド時の標準出力はファイルにリダイレクトしとかない?

121:デフォルトの名無しさん
08/06/04 03:26:23
grepしないと不安だよね。

122:デフォルトの名無しさん
08/06/04 23:51:24
>>119
それsvnで直接拾ってきたソース?
もしそうならsvnで落とすときに言語設定が日本語になっていて日付が日本語表記になったせいだと思う


123:デフォルトの名無しさん
08/06/05 00:50:43
>>122
ソースはsvnからTortoiseSVNで落としてきて、tools/bjamフォルダ内のbuild_dist.batで組んだbjamで
ビルドしてます。
言語環境は日本語Vista SP1に英語パックを入れた状態ですが、
日本語の文字化けの関係でシステムロケールは日本語にしています。
今見たら日付のフォーマットはLong dateが漢字を使っていたので英語にしました。
次回のビルドで検証してみます。

124:デフォルトの名無しさん
08/06/05 03:29:40
日付と時刻のフォーマットを英語にしてソースを全て落とし直してからビルドしたところ、
/wd4819を設定しなくてもC4819の発生が激減しました。
ビルドも24分で完了しました。有難うございます。

125:デフォルトの名無しさん
08/06/05 03:59:02
珍しく有益な情報だな
やっぱり結論が書いてあるとよい
質問主も回答者も乙

126:デフォルトの名無しさん
08/06/06 09:02:28
そういえばドイツ人の書いたコードにドイツ語コメントあってコンパイルこけたことあったな

127:デフォルトの名無しさん
08/06/06 10:26:55
CじゃなくてPythonだが、スクリプトがエラーを吐くので調べてみたらauthor欄に"◆"が入ってた。
即座に空欄にした。
あの時ほど、死ね2chねらと思ったことはない。

128:デフォルトの名無しさん
08/06/06 15:28:28
boostは確かlexical_castとかのauthorがASCII以外の文字を使ってたような気がするぞ、

129:デフォルトの名無しさん
08/06/11 14:00:59
Boost.Threadに

event
timer

に相当するものがないのはなぜ?

130:デフォルトの名無しさん
08/06/11 14:30:20
スレッドその物じゃない。

131:デフォルトの名無しさん
08/06/11 14:40:50
力作を送れば採用してもらえるかも?

そういえばboostに日本人作のものって入ってるの?

132:デフォルトの名無しさん
08/06/11 15:59:44
boost::conditionとかじゃないのか?

133:デフォルトの名無しさん
08/06/11 16:03:34
>>132>>129へのレス

むしろ、Lockの名前や使い方が以前のバージョンと違うほうが問題

134:デフォルトの名無しさん
08/06/11 17:12:18
boost.rubyができれば強制的に入ることになるかも

135:デフォルトの名無しさん
08/06/11 18:26:59
>>131
boost::rangeの一部(MFCコンテナ用range)は日本人っぽい名前だったような。
あとこないだまでレビューしてたboost::eggも多分そう。

136:デフォルトの名無しさん
08/06/11 19:29:51
「C++なぞ問題外」と書いたまつもと氏のRubyがboostに入るわけですか
boostは心が広いなぁ、ホント素敵!

137:デフォルトの名無しさん
08/06/11 19:40:03
いいえ、RubyをベースにしたRuby++言語の処理系をboostベースで実装します

138:デフォルトの名無しさん
08/06/11 19:53:23
boost なぞ問題外.^^;;;

139:デフォルトの名無しさん
08/06/11 20:50:38
どうでも良いが個人的にまつもと氏に0xに改善されても尚C++が問題外かどうかを訊ねたい。

140:デフォルトの名無しさん
08/06/11 20:55:22
boostのtime関係って
ってなんであんなにごちゃごちゃしてるの?

boost::date_time
boost::x_time
boost::system_time


141:デフォルトの名無しさん
08/06/11 21:03:26
C++のtime関係がごちゃごちゃしてるからだよ。

142:デフォルトの名無しさん
08/06/12 02:29:45
SVNはasioが頻繁にアップデートされているな。
そのうちDirectSoundと同じ位気軽にASIOを扱える様になるんだろうか。

143:デフォルトの名無しさん
08/06/12 02:32:12
って、ソース見たらASIO関係無い・・・
穴があったら入りたい

144:デフォルトの名無しさん
08/06/12 02:44:50
全くのスレ違いだがPortAudioをオススメしておく

145:デフォルトの名無しさん
08/06/12 03:02:40
ありがとう

146:デフォルトの名無しさん
08/06/12 06:56:32
>>139
URLリンク(jp.rubyist.net)
こんな記事も書いてたぞ。

147:デフォルトの名無しさん
08/06/12 12:29:48
>>139
悪いものに何を付け足しても良くならないと考えるんじゃない?

148:デフォルトの名無しさん
08/06/12 13:59:50
Ruby より優れた言語はこの世に存在しない。

149:デフォルトの名無しさん
08/06/12 14:07:47
スクリプト言語と普通の(?)言語を一緒にされても・・・

150:デフォルトの名無しさん
08/06/12 17:46:02
Rubyでブートローダーとかデバイスドライバとかゲームとか作れるのかよ。

151:デフォルトの名無しさん
08/06/12 18:03:27
boostはpythonをサポートしてるから、boostスレでわめいてもRubyの布教に効果ないよ。

152:デフォルトの名無しさん
08/06/12 18:10:52
空飛ぶパイソンvsキリスト

153:デフォルトの名無しさん
08/06/12 18:28:07
boostがrubyに対応させる?
rubyがboostに対応させる?



154:デフォルトの名無しさん
08/06/12 19:38:59
まー、Java(笑)なんかよりは優秀だろ
Rubyは

155:デフォルトの名無しさん
08/06/12 20:09:15
Java言語がいかに貧弱だろうとJVMが優秀だからJavaが有利

156:デフォルトの名無しさん
08/06/12 21:15:45
最近じゃscalaとかあるしなぁ

157:デフォルトの名無しさん
08/06/12 22:19:12
Fortran「」←帰れと退けたくなる様な事言わせろ

158:デフォルトの名無しさん
08/06/12 22:25:49
>>157
あなた様がいなければ、CやC++といった素晴らしい言語は生まれませんでした

159:デフォルトの名無しさん
08/06/12 22:30:47
Boost.Malbolgeマダー?

160:デフォルトの名無しさん
08/06/12 22:32:13
Fortran「全部大文字で書いてくれ。俺の名前も」(1977)

161:デフォルトの名無しさん
08/06/13 09:38:24
Boost.XML
Boost.SOAP
Boost.CORBA
誰か作ってケロ

162:デフォルトの名無しさん
08/06/13 10:49:42
Boost.XMLはspiritにxml用の設定があったような?

163:デフォルトの名無しさん
08/06/13 12:20:14
xml_iarchive xml_oarchive

164:デフォルトの名無しさん
08/06/13 15:10:55
boost.rails
しかもMPL使いまくりなのを

165:デフォルトの名無しさん
08/06/14 18:42:39
BOOST_AUTOは完全にC++に準拠していて尚且つ拡張の無い環境ではちゃんとコンパイルされるの?

166:デフォルトの名無しさん
08/06/14 21:51:58
それでできたら C++0x の auto の追加はいらないんじゃないか?
でも auto ほど簡単な記述はできないか。

167:デフォルトの名無しさん
08/06/14 22:17:23
コンパイラのバグをうまくついて実装してたりするんじゃなかったっけ?

168:デフォルトの名無しさん
08/06/14 22:32:40
>BOOST_AUTOは完全なコンパイラの元では規定型の自動変数の宣言をラップしたものになる。
>規定型とはC言語時代のint

169:デフォルトの名無しさん
08/06/16 01:43:17
ここ5年はMicrosoftべったりのC++プログラミングの仕事だったんだけど標準に近いC++に戻ってきました。
特にテンプレート周りの環境変化は浦島状態なんですが、なにかお勧めの書籍ないですか?
細かいところはWebでしか追いかけられないのは承知ですが、まとまった内容は書籍の方が体系的に吸収できると思うので。

リハビリでModern C++ Designは読みましたが、今となってはあれも古い本だよねぇ。
LokiはBoostに吸収されてしまってるのかな?

170:デフォルトの名無しさん
08/06/16 05:15:28
日本語のboost本は殆ど初心者向け。君が得られるものは何もない。
以上からお勧めの書籍は存在しないという結論に至る。
まあ導入くらいが目的なら、そこらに落ちてるboost本なら何でも。

171:デフォルトの名無しさん
08/06/16 07:00:15
boost本って稲葉の以外に出てるの?

172:デフォルトの名無しさん
08/06/16 09:08:23
>>171
Boostスレだけど、C++一般なんだよね?
「C++ Coding Standards-101のルール、ガイドライン、ベストプラクティス」
これが今のところ網羅的な本。初心者にもルール集としては便利だけど、
内容は中級以上じゃないと理解できない。

>>171
つ Beyond the C++ Standard Library: An Introduction to Boost
つ The Boost Graph Library: User Guide and Reference Manual

173:デフォルトの名無しさん
08/06/16 09:47:36
日本語は俺も稲葉著以外ないでしょ

>>169
C++ Template Metaprogramming
テンプレートっていうかBoostのTMPの本だがリハビリには丁度良いかと

174:173
08/06/16 09:50:28
間違えた

-日本語は俺も稲葉著以外ないでしょ
+日本語は俺も稲葉著以外知らない

稲葉のも糞とは言わんが内容的に半端だからなぁ

175:デフォルトの名無しさん
08/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自体はバグがそれなりにとかあったので、仕事には使いづらいのかなとも…。
ちょっと空気が読みきれてなくて、初歩的な質問すまそです。

176:デフォルトの名無しさん
08/06/16 12:01:27
両方のOSで動かしたいだけなら、Cygwin入れてgcc使えばいいのに。

177:デフォルトの名無しさん
08/06/16 13:46:26
・Lokiはもはや必要ない
・Boostの前にTR1

・g++は最新のものを附属のlibstdc++と一緒に
・VC++は「必ず」最新のものを、必要になった時にSTLportと
・暇があればConceptGCCも試す


178:デフォルトの名無しさん
08/06/16 13:48:23
フェニックスシングルトンってLoki以外の他のそれ以外のBoost以外を除いたものの中にサポートされてたっけ?

179:デフォルトの名無しさん
08/06/16 14:20:27
Boost.Singleton って定期的にレビューに現れては reject されてるな

180:デフォルトの名無しさん
08/06/16 23:46:07
>>177
どうもありがとう!

181:デフォルトの名無しさん
08/06/17 20:12:12
boost.spiritって何がspiritなの?
ふざけてるの?

182:デフォルトの名無しさん
08/06/17 21:52:15
すいません、boostを巻き込むとコンパイルにえらい時が掛かるんですが、こんなもんなの?

183:デフォルトの名無しさん
08/06/17 21:53:52
つプリコンパイルドヘッダ

184:デフォルトの名無しさん
08/06/17 21:56:38
>>182
俺も高性能なPCが欲しくて仕方がない。

185:デフォルトの名無しさん
08/06/17 23:15:09
>>182
boost使い始めるとコンパイルが見る見る遅くなるんで笑った。

テンプレートを実体化するものをヘッダーに置くとすさまじく遅くなるようだ。BOOST_CLASS_EXPORTとか遅いね。cppで実体化させる様にすると速くなる。


186:デフォルトの名無しさん
08/06/18 12:37:06
xpressiveを使ったときのコンパイルの遅さとmapファイルの肥大化には思わず笑ったな

187:デフォルトの名無しさん
08/06/18 12:41:37
VSの簡易リビルドが正確だったら、この機能を使ってコンパイル時間を短縮できるのに。


188:デフォルトの名無しさん
08/06/18 12:52:46
boost.pythonちょっと試そうと思ったんだけど
単なるhello, worldにも異常にコンパイル時間かかるから断念した
これならSWIGやpyrexみたいなの使ったほうがいい

ターンアラウンド遅すぎるしコンパイラのエラーメッセージは不可解だから、
学習やおためしには不向きだな
俺みたいなヘタレは、デバッガつかってもboostのコードは追いきれる自信ねえよ
難解なマクロとテンプレートのコンビ技の嵐だし

189:デフォルトの名無しさん
08/06/18 14:59:12
boost::ptr_vector が内部に持っているポインタ配列の先頭アドレスを取得する
メソッドはあるでしょうか?

190:デフォルトの名無しさん
08/06/18 20:01:21
&V[0]とか?


191:デフォルトの名無しさん
08/06/18 20:32:13
ptr_vector の operator[] はポインタが参照するオブジェクトへの参照なので
配列のアドレス情報は含まれないはずです。

192:デフォルトの名無しさん
08/06/18 20:45:15
どういう間隔で配列が内部にあるかという情報はないの?

193:デフォルトの名無しさん
08/06/18 21:35:40
たぶん内部では boost::ptr_vector<T> pv の中には std::vector<T*> v のようなものが含まれていて
template<class T> T& ptr_vector<T>::operator[]( size_type pos ) { return *v[pos]; }
のような実装になっていると思う。
実際に欲しいアドレスは &v[0] だけど、&pv[0] とすると v[0] を得てしまう。

194:デフォルトの名無しさん
08/06/18 22:23:22
ptr_vectorの定義見ればいいんじゃね?

195:デフォルトの名無しさん
08/06/18 23:09:29
マクロばっかの追いにくいコードだったと思う

196:デフォルトの名無しさん
08/06/18 23:17:01
Boostに動的ライブラリのラッパーが追加される予定はありますか?
GLibのGModuleみたいな。


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