5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Boost総合スレ part6

1 :デフォルトの名無しさん:2008/04/09(水) 23:04:01
過去スレ
part 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/

2 :デフォルトの名無しさん:2008/04/09(水) 23:05:30
■関連書籍■
Boost 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/

3 :デフォルトの名無しさん:2008/04/09(水) 23:06:26
Loki
http://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/

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

boobsを語れゴルァ boost::array<part, 6>
http://pc11.2ch.net/test/read.cgi/tech/1207744477/

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

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

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

7 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/04/11(金) 19:23:02
runtime-link=static,shared
こんな風に複数指定できるの?
おれはいつもこんな風に指定しているんだけど。

runtime-link=static runtime-link=shared


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

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

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

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

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

13 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/04/15(火) 09:00:21
>>12
asio良いよな

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

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


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

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

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

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

22 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/04/29(火) 02:28:29
bjam使っとけば

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

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

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

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

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

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

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


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

30 :22:2008/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 :デフォルトの名無しさん:2008/05/01(木) 09:12:28
>>30
まずはそのlibファイルがあるか確認しよう。


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

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

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

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


37 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/05/03(土) 19:14:30
というかなんでいまさらになって、Boostのインストールの話ばかりなんだ。
インストールなんて難しくないだろ。
SVNからHEAD引っ張ってきてbjamでビルドするだけだろ。


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

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

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


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

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

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

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

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

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

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

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

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

できるな。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

68 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん: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

宜しく御願いします。

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

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

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

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

74 :デフォルトの名無しさん:2008/05/13(火) 17:15:20
>>70
ttp://www.boost.org/doc/libs/1_35_0/doc/html/lambda/le_in_details.html#lambda.members_variables_as_targets
でがまんしる

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

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

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

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

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

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

81 :デフォルトの名無しさん:2008/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();
  }
};

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

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

83 :81:2008/05/20(火) 13:03:27
>>82
thx
コンパイル通りました。
データが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でエラーが出るということは、
ライブラリへのパスが通ってないわけじゃないと思うんですが、原因はどこにあるのでしょうか?

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

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

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

87 :デフォルトの名無しさん:2008/05/21(水) 08:39:25
>>86
http://www.nabble.com/Preliminary-0.9.0-tarballs---VC++-2008-Express-td14142470.html

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

89 :83:2008/05/21(水) 14:38:36
thx
よく理解しないまま、
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つになりました。
うーん、自分の知識が足りないか・・・。

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

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

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

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

92 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/05/24(土) 18:20:21
>このイテレータはSTLのRandomAccessIterator要件を満たす
どこに書いてあります?

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

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

http://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+()が定義されていなくても
当然なのですが、ちょっと混乱しています。


95 :デフォルトの名無しさん:2008/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:2008/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 のドキュメント
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. " と
書いてあります.

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

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

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


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

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

101 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/06/01(日) 22:02:07
問題が起きる最小限のソースコードplz

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

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

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

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


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

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

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

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

111 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/06/02(月) 21:49:14
>>111
監視ログにHDDの不調でてないか?


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

114 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/06/03(火) 00:59:14
ビルド終わりました。
214ファイルで4時間15分・・・orz

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

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

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

119 :デフォルトの名無しさん:2008/06/04(水) 02:43:08
>>117
有難うございます。感謝感激です。
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


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

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

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


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

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

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

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

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

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

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

event
timer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

146 :デフォルトの名無しさん:2008/06/12(木) 06:56:32
>>139
http://jp.rubyist.net/magazine/?0018-Legwork
こんな記事も書いてたぞ。

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

172 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/06/16(月) 09:47:36
日本語は俺も稲葉著以外ないでしょ

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

174 :173:2008/06/16(月) 09:50:28
間違えた

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

193 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/06/18(水) 22:23:22
ptr_vectorの定義見ればいいんじゃね?

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

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

197 :デフォルトの名無しさん:2008/06/19(木) 00:38:35
>>189
c_arrayメンバ関数

198 :デフォルトの名無しさん:2008/06/19(木) 02:19:13
>>197
おお、こんなのがあったんですか。ありがとうございました。

199 :デフォルトの名無しさん:2008/06/19(木) 21:49:56
boostにMATLABでいう多次元配列のようなものあるでしょうか?
multi_arrayを試してみたのですがA+Bといった処理ができなくて・・・
matrixだと2次元行列しか対応してないのでしょか?

200 :デフォルトの名無しさん:2008/06/20(金) 03:32:21
>>199
uBLAS

201 :デフォルトの名無しさん:2008/06/20(金) 14:53:12
boost::formatを使って、数字を右寄せで表示しようと思ったのですが、やり方が分かりません。
0で穴埋めしか方法はないのでしょうか?

202 :デフォルトの名無しさん:2008/06/20(金) 16:44:28
>>201
printfと同じ書式指定でできると思うけど、それじゃ不足?

std::cout << boost::format("%8d") % 42 << std::endl;

みたいな感じ

203 :デフォルトの名無しさん:2008/06/20(金) 16:53:19
>>188
swigを試してみてboost.pythonの偉大さに気がつくだろう
c++とpython組み合わせるならこれかctypes以外の選択はありえない
swigが動くのはtoy problemだけ

204 :デフォルトの名無しさん:2008/06/20(金) 16:54:50
>>199
同じ疑問を前にもったことあるけど、前に探したときはいいのなかった

205 :デフォルトの名無しさん:2008/06/20(金) 18:10:04
>>203
そうかな。
boost.pythonのチュートリアルの最初の例である
"hello, world"を返すだけの関数なんだが、char*をwchar_t*に
変えてみただけで、長いコンパイル時間の末に、糞長く意味不明な
コンパイルエラーの列に遭遇した。
俺はchar*→PyStringに対応するwchar*→PyUnicodeの自然なマッピングが当然
存在するだろうと想像したが、実際にはそうではなかったわけだ。

ヘッダを潜ってみて、どうやらwstringならイケることが分かったけれども
こんなことはやってられないな、と思ったよ。

206 :デフォルトの名無しさん:2008/06/20(金) 18:26:58
コンパイルエラーってそれ自分がミスしたんだろ。
wstringで変換できるならやればいいだろ。
いみがわからん。

207 :デフォルトの名無しさん:2008/06/20(金) 18:31:19
つーかwstringなら通るんだ? どう見てもpythonのUnicode文字列とは等価じゃないのに。

208 :デフォルトの名無しさん:2008/06/20(金) 18:32:32
>>206
その「ミス」がわかるまで遅すぎる(時間がかかる)上に、
エラーメッセージがhuman readableでないから、原因を特定するのに
異常に時間がかかると言ってるんだよ

だいたい、char*やwstringはイケてwchar_t*はダメなんてデザインは
一貫性も糞も無いし、そんなの予想できないよ


209 :デフォルトの名無しさん:2008/06/20(金) 18:33:08
>>207
うん。通ったよ。
Pythonからインポートして、unicode文字列が得られることも確認した。

210 :デフォルトの名無しさん:2008/06/20(金) 19:42:30
>>209
ほへー。 俺も試してみるか。

211 :デフォルトの名無しさん:2008/06/20(金) 19:52:02
ほんとだ、wstringは双方向で通るくせにwchar_t*は通さねぇw

まぁ確かに他にもドキュメントの読み辛さとかembeddingの弱さとか色々発展途上の感じは否めないが、
そこだけを叩いて使えねぇとするのはいささか不公平だろうよ。
objectからattrで名前を取り出してそのままoperator()で関数が呼べる便利さとか
extract<>で大体のデータ型は上手いこと取り出せたりする所とかをもっと評価してやるべきだと思う。

212 :デフォルトの名無しさん:2008/06/20(金) 19:58:56
>>211
うん、凄そうなのは分かってるんだよ
ただ、いざとなったらヘッダ読み込む気合が無いととてもついていけない世界だなと
改めて感じたってことさ
trivialなhello, worldの例でUnicodeが使えるかどうかを確かめるのに
俺がどんだけ時間かけたと思う?

ま、そういうパワーがある人は羨ましいっつーことで
嫉妬乙、とでも思ってくれ

213 :201:2008/06/20(金) 21:38:13
>>202
thx
printfほとんど使ってこなくて、知らなかった・・

214 :デフォルトの名無しさん:2008/06/20(金) 21:41:44
ゼロサプレスって言った方が賢く見えるよ^^v

215 :デフォルトの名無しさん:2008/06/24(火) 13:02:41
boost.pythonが複雑ならctypes使えばいいじゃない
swigはとにかくありえない

216 :デフォルトの名無しさん:2008/06/24(火) 19:51:44
boostから引用されているC++0xって英語版VSには追加パッケージでくるって聞いたけど
日本語VSにはこないの?

217 :デフォルトの名無しさん:2008/06/24(火) 20:03:54
そりゃβの話だろ。SP1に含まれるよ

218 :デフォルトの名無しさん:2008/06/24(火) 20:06:53
あらほんと?
VS2008買っちゃおうかしら...

219 :デフォルトの名無しさん:2008/06/24(火) 20:10:34
VS2008ほどSP1が待ち遠しいVSはないな
俺はMFC目的だが

220 :デフォルトの名無しさん:2008/06/24(火) 22:14:09
C++0xの為に新しいPCをバイトをして買わなければ・・・
でもプログラミングする時間が・・・

221 :デフォルトの名無しさん:2008/06/25(水) 21:03:16
boost mpl について質問があります
template<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等では案の定上手くいきませんでした
ご教示ください

222 :デフォルトの名無しさん:2008/06/26(木) 05:16:30
BOOST_PP_REPEATで何が駄目なのかよく分からない。
マクロレベルじゃなくてTMPレベルで自動生成したいって事か?
ならBOOST_PP_REPEATで予め256通りの特殊化を作っておく必要がある。

223 :221:2008/06/26(木) 08:31:47
#define GEN(z,n,d) ...

template<typename TL>
class foo
{
typedef boost::mpl::size<TL> Size;
BOOST_PP_REPEAT(Size::value, GEN, data);
}
で怒られたわけです。
Size::value の代わりにリテラルにすると展開してくれます
PPの処理順序の問題化と

224 :221:2008/06/26(木) 08:44:23
エディタのマクロに働いてもらうことにします

225 :デフォルトの名無しさん:2008/06/26(木) 08:48:54
template<typename TL> class foo;
BOOST_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;

こうか。


226 :デフォルトの名無しさん:2008/06/26(木) 08:51:40
キモいというか読み辛い。
コンパイラには通してないから適当に間違ってる所があったら修正してくれ。

227 :221:2008/06/26(木) 08:58:53
>>225
ありがとうございます
正気にては大業成らずって感じですねw
後でゆっくり解読させてもらいます

228 :デフォルトの名無しさん:2008/06/26(木) 10:29:13
何故デフォルト引数を使わない

229 :デフォルトの名無しさん:2008/06/27(金) 10:46:38
Windows、VC++2008、boost 1.34.1です。
VC2008の対応はここを参考にしてます。
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を作れるのでしょうか?

230 :デフォルトの名無しさん:2008/06/27(金) 11:57:01
boostの重さに耐えられない→結局自作

231 :デフォルトの名無しさん:2008/06/27(金) 17:32:45
VC2008では1.35.1使えってな結論が以前出てなかったっけ

232 :デフォルトの名無しさん:2008/06/27(金) 17:59:32
>>231 マジ?どこどこ?

233 :デフォルトの名無しさん:2008/06/27(金) 18:03:16
http://www.boost.org/development/tests/release/developer/iostreams.html
gzipもbzip2も空白になってるが。

234 :デフォルトの名無しさん:2008/06/27(金) 18:52:33
>>232
>90-91

235 :デフォルトの名無しさん:2008/06/27(金) 21:50:26
SVNの話題ですが、バージョンが今日付で1.36に移行しました。
興味がおありでしたらVC2008用ライブラリ一式をどこかに上げますが如何致しましょう。

236 :デフォルトの名無しさん:2008/06/27(金) 22:23:30
むしろビルド方法を書いて啓蒙してくれ

237 :デフォルトの名無しさん:2008/06/27(金) 22:29:58
新規ので気になるのはとりあえずexception

238 :デフォルトの名無しさん:2008/06/27(金) 23:12:25
ほんとだ、1.36になってるな。

>>236
ビルド方法なんて散々既出だとおもうが。

239 :デフォルトの名無しさん:2008/06/28(土) 00:50:25
>>236
こんな感じで如何でしょう。
ttp://booster.x0.to/build.txt
ついでにライブラリも。全部揃ってるかな?
ttp://booster.x0.to/boost_1_36_svn46766.rar

あ、私>>108でございます。

240 :デフォルトの名無しさん:2008/06/28(土) 00:58:08
1.36の新機能のレビューお願いします

241 :デフォルトの名無しさん:2008/06/28(土) 01:01:20
申し訳ございません、プログラミング自体が先日始めたばかりで
Boostはビルドしているだけで未だ利用迄手が回っていない状態でございます・・・

242 :デフォルトの名無しさん:2008/06/28(土) 03:14:42
さっき1.35入れたばかりだけど今から1.36入れよう。

243 :デフォルトの名無しさん:2008/06/28(土) 05:29:58
>>239
GJGJ

244 :デフォルトの名無しさん:2008/06/28(土) 09:37:11
>>239
サンクス

次からテンプレに入れたいなこれ

245 :デフォルトの名無しさん:2008/06/28(土) 10:40:43
お早うございます。
朝起きてSVNを更新してみたらFixが大量に為されていたので、svn46798をビルドして上げておきました。
ttp://booster.x0.to
ドメインbooster.x0.toは一時公開用に取っただけだったのですが、
割と需要があるみたいですのでこのまま維持して週一位の間隔でSVNをビルドして上げていこうかと思います。


246 :デフォルトの名無しさん:2008/06/28(土) 12:26:28
svnのどこに1.36って書いてあるよ? って思ったらversion.hppが変わったってことなのね。

247 :デフォルトの名無しさん:2008/06/29(日) 15:39:09

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

Googleがお前らを気狂い認定w

248 :デフォルトの名無しさん:2008/06/29(日) 15:46:34
> Googleがお前らを気狂い認定w

C++ユーザーなんて認定上等! だろうなぁw

249 :デフォルトの名無しさん:2008/06/29(日) 16:33:02
ただのコーディングルールだろ

250 :デフォルトの名無しさん:2008/06/29(日) 16:40:15
笑いどころを教えてくれ


251 :デフォルトの名無しさん:2008/06/29(日) 16:50:53
>Some Boost libraries encourage coding practices which can hamper readability,
>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だけ許可されているんだろう。

252 :デフォルトの名無しさん:2008/06/29(日) 17:04:52
>>251
続きの文章をコピペしないのは公平とはいえないな。
>We are actively considering adding other Boost features to the list, so this rule may be relaxed in the future.
我々は他のBoost機能をリストに加えることを活発に考えているので、この規則は将来緩和されるかもしれません。

253 :デフォルトの名無しさん:2008/06/29(日) 17:24:18
それより
We do not use C++ exceptions.
We do not use Run Time Type Information (RTTI).
ってどうよ

254 :デフォルトの名無しさん:2008/06/29(日) 17:39:56
kernelやDBMSのエンジンみたいなのがexception投げまくりコードなんて
想像するだけでもぞっとしないし、至極妥当だと思うけど

なんか問題あったら適当に諦めて試合終了していいオモチャじゃなきゃ
そこらは慎重にならざるを得ないんじゃないの

255 :デフォルトの名無しさん:2008/06/29(日) 17:59:34
・・・。

256 :デフォルトの名無しさん:2008/06/29(日) 18:05:24
>>252
いや、それはどうでもいいんだ。
何で現時点で、compressed pairだけ許可されているのか気になるんだ。
あれってそんなに使い勝手がいいものじゃないだろ?


>>253
Googleにとって大抵のエラーは例外的なエラーではないんじゃない?
基本的に奴らは多数のコンピュータでスケールさせりゃいいって考えだし、
ハードの故障なんてしょっちゅうだし。

dynamic_castとかtypeidとかは、普通使う必要はないだろ。
ユニットテストには使っていいって書いてあるし。
実際デバッグぐらいに使うのが妥当だろ。

257 :デフォルトの名無しさん:2008/06/29(日) 18:07:36
ん?なんかおかしいこと言ったか?
Joel Spolskyも例外嫌いと言ってたけど
大体googleと同じ理由だったな

C++にはRAIIのようなテクニックはあるけど、彼らは非常に多くの顧客を
相手にしていて信頼性や性能の要求水準が非常に高いから、
例外を使いつつ、同時に要求される信頼性や性能を達成するってのが、
結局割に合わないってだけなんだよ

258 :デフォルトの名無しさん:2008/06/29(日) 18:49:35
>>254
それ例外の使い方間違ってないか?
例外安全意識して書いてれば
> なんか問題あったら適当に諦めて試合終了
なんてことにはならないんだが。

259 :デフォルトの名無しさん:2008/06/29(日) 18:51:57
例外が嫌われる理由はなんなの?

万一拾い忘れたとき(コード人為的ミス)
(1) 例外の場合 : プログラム停止
(2) エラー値返しの場合 : エラー無視
で、デフォルトとしては(2)の方がまだましということかな?

だとすればRAIIとは関係ない論点ということになる?

260 :デフォルトの名無しさん:2008/06/29(日) 18:59:35
>>259
(1) のほうがマシと考える人も相当数いるとおもうから、それは理由には
ならないんじゃないか?

・例外使う派(既存のコードや人)と使わない派を組み合わせるとマズイ。
・例外安全という新しい概念が前面に押し出されていて面倒。

こんなところかと。

後者はエラーコードでも同じ話が出てくるはずなんだけどな。なぜか
例外に限った話だという迷信(?)が根強い。

261 :デフォルトの名無しさん:2008/06/29(日) 19:23:44
例外が嫌われる理由としてはソースの可読性が下がるってのがあるけどな。


262 :デフォルトの名無しさん:2008/06/29(日) 19:36:33
可読性は上がるだろう。フローは追いにくくなるかも知れんが。

263 :デフォルトの名無しさん:2008/06/29(日) 19:37:28
>>259
その程度のレベルの話はgoogle的には問題にもなっていない。
RAIIはあくまで「リソースリークを避けられる」だけだ。
RAIIさえ使ってれば例外安全、と思ってるならそれは違う、と言わざるを得ない。

例えば何か複雑なデータ構造を更新している最中に例外を投げられても
それで諦めて試合終了してはいけないプログラムであるような場合に、
真にコードが真に「例外安全」であることを保障するためのコストが、
例外により儲かるbenefitと全く釣り合ってないって話だろ。

264 :デフォルトの名無しさん:2008/06/29(日) 19:44:53
>>263
例外使わなければエラー発生時の安全性を保証するのが簡単になるの?

265 :デフォルトの名無しさん:2008/06/29(日) 19:48:38
>>264
Joelが書いているが、極端な話、非常にクリティカルな場所では
例外安全性を保障するために一文ごとにtry .. catchを使うことになる。
それは恐ろしく冗長で醜い。
それぐらいなら、古きよきエラーハンドリングのほうがまだマシだって話だろ。

266 :デフォルトの名無しさん:2008/06/29(日) 19:54:05
一行ごとにって、いったい何の例外をキャッチしたいんだ?例外の使い方間違ってないか?
まさか、URL文字列の解読なんかじゃないよね?

267 :デフォルトの名無しさん:2008/06/29(日) 19:54:06
検証箇所は減るよね

268 :デフォルトの名無しさん:2008/06/29(日) 19:58:18
>>266
googleやJoelに言えよ。
カーネルがinodeやbtree更新してる最中に放り投げてファイルシステム
ぶっこわれたら困るだろ?

無論、i++;みたいな例外を投げないことが分かっているコードなら別だが、
関数呼び出しのようなものを含む場合は、それが例外を直接ないし間接に
投げないことを保障するにはcall treeを全部たどるしかない。
つまり、そのコードが例外安全かどうか、「正しい」コードかどうかを
判断するのが読み手にとってずっと困難になる。

言っておくが、皆が皆例外を使うべきじゃないなんて俺は一言も言ってないぞ。
奴らの要求水準にとってはそれが妥当なコーディングルールなのだろうと
言ってるだけだ。

269 :デフォルトの名無しさん:2008/06/29(日) 20:03:16
>>268
例外処理で吹き飛ぶファイルシステムって、停電でも吹き飛びそうで怖いな。

しかし、なぜに例外を禁止するかの具体的な理由は後学のために知りたいもんだけど。


270 :デフォルトの名無しさん:2008/06/29(日) 20:05:17
だから、googleの理由ならちゃんと書いてあるんだから読めよ

271 :デフォルトの名無しさん:2008/06/29(日) 20:05:38
Googleに聞けよ。というか>>247読めよ。

272 :デフォルトの名無しさん:2008/06/29(日) 20:33:25
googleではJavaは禁止ね

273 :デフォルトの名無しさん:2008/06/29(日) 20:42:22
>>272
C++、Java、PythonがGoogleの公用語だったはず。
JavaはSUNと共同開発だかなんだかする位。
Pythonは作者を雇っちゃってる。

274 :デフォルトの名無しさん:2008/06/29(日) 20:47:05
公用語ワロタ

275 :デフォルトの名無しさん:2008/06/29(日) 21:58:33
例外使うと、後片付けとか、その他の終了処理が面倒になる可能性があるのと、
不具合対処のデバッグが極端に難しくなるのが、原因だと思う。
少なくともWindowsだと落ちてくれる方が、不具合対処はよっぽど楽だし。

276 :デフォルトの名無しさん:2008/06/29(日) 22:43:00
>>275
1行目は、終了処理はデストラクタで。
2行目は、なんだろう?
3行目は、落ちてくれるほうがいいなら例外マジおすすめ。

ってことで、2行目詳しく。

277 :デフォルトの名無しさん:2008/06/29(日) 22:57:32
>>276
mainでcatchしてると、例外の箇所でデバッガがブレークしてくれないよー。なんてことじゃないことを祈る

278 :デフォルトの名無しさん:2008/06/30(月) 00:17:50
C++の例外が敬遠され勝ちなのは、
後付けでまだまだうまくライブラリ群に融合してないからでしょう。
例外機構そのものには問題はない。

> カーネルがinodeやbtree更新してる最中に放り投げてファイルシステム
> ぶっこわれたら困るだろ?

例外を全く理解してない。30年くらい前の頭。


279 :デフォルトの名無しさん:2008/06/30(月) 00:21:07
>>269
しつこく食い下がる割に、ビッグネームの言い分に立ち向かうことには及び腰で
あくまで「ここの連中の言葉」だけ相手にしたがるお前にワラタ。

280 :デフォルトの名無しさん:2008/06/30(月) 00:21:14
30年前は例外投げたらファイルシステムぶっ壊れたの?

281 :デフォルトの名無しさん:2008/06/30(月) 00:24:00
>>280
短絡思考

282 :デフォルトの名無しさん:2008/06/30(月) 00:24:42
英語がよめないのでビッグネームの言い分がわかりません
解説お願いします

283 :275:2008/06/30(月) 01:14:22
>>276
3行目の"落ちる"は例外処理してプロセス終了させる意味ではなくて、
アプリケーションエラー(メモリ参照エラー等)で落ちるの意味。
で、2行目と3行目は大体同じ意味。Windows前提だけど、例外処理を捕捉して
ログ吐かせるのに手間ヒマかけるよりか、自動起動のデバッガのスタックトレースを
追っかけた方が対処が早いし確実。

tryブロック内でnewしたオブジェクトの後片付けは、finallyとかあったら楽なのかも。

>>277
昔、ネストしたクラスで例外処理していた時に、子クラスから親クラスへ順々に
catch (ex) ⇒ throw ex していたら、どこで異常処理になっているのか
さっぱり分からなくなった記憶が…。例外処理のセオリー(デザインパターン?)
みたいなものってあるんでしょか?

284 :デフォルトの名無しさん:2008/06/30(月) 01:16:22
>>278
例外機構事態に問題がある、とかいう話じゃねえよ。

問題があってもきちんとロールバックやリカバリを行って動作し続けなければ
ならないような、間違ってもデータ構造更新中に中途半端な状態で放置
してはならないような種類のプログラムで、例外機構を使って信頼性のあるコードを
書くのが難しいし、そのコードの例外安全性を保障することは、さらに難しいって
話だろ。

勿論、エラーを送出し得る全てのコード(関数呼び出し)を逐一try/catchで囲めば
意味的には例外を使わず全ての関数呼び出しの戻り値をチェックするのと同じだ。

が、そんなことをやるコードは、単に戻り値をチェックしてエラー処理をする
コードよりも汚く冗長で、その上無用なオーバーヘッドを抱えることになる。
つまり、ちっとも嬉しくないだろ。例外使っても。

285 :デフォルトの名無しさん:2008/06/30(月) 01:19:12
>>283
VCのデバッガ場合ハンドルされている例外はブレークしないのがデフォ設定になってる。
デバッガの例外の設定でブレークがかかるようにできる。


286 :デフォルトの名無しさん:2008/06/30(月) 01:19:34
>>283
> 自動起動のデバッガのスタックトレースを

構造化例外を捕捉して起動してますが…

287 :デフォルトの名無しさん:2008/06/30(月) 01:20:16
初期化子も理解してないお子様なのでは?

288 :283:2008/06/30(月) 01:50:07
>>285
知らなかった…orz。ありがとうございます。

>>286
なるほど、構造化例外(SEH)は書籍でしか見たことがなかったもので…。
ありがとうございます。

>>287
すいません、初期化子について良く分かってないんですが、以下のサイトに書いてあることと関連あるんでしょうか?
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200407/04070024.txt

289 :デフォルトの名無しさん:2008/06/30(月) 01:57:29
初級脱却用テキスト、Accelerated C++でも読んでくれ。

290 :デフォルトの名無しさん:2008/06/30(月) 02:45:06
>>284
うんうん、これよくわかった。どうもありがとう。

想定エラーケースのうち :

ちまちま細かいリカバー継続処理(数ステップ程度)が求められるケースが多いプログラムの場合
-> 返り血方式の方が書くのが楽
(場合によってはブロックも越えて)どかんと飛ぶようなスキップ・再試行が求められるケースが多いプログラムの場合
-> 例外方式の方が書くのが(相当)楽

ということね。
まあ、みんなもそうだろうけど、ちまちまとどかんの両方あることわかってて、
例外方式だけで統一するか、返り血方式だけで統一するか、設計時に岐路に立たされるよね。

余談だが、実は例外使うのなかなかハードル高いよね。

別の人も書いてたけど、両方式まぜまぜが一番イクナイというか怖い、のだが、
既存ライブラリやAPIは返り血方式をとってるのが多かったりするという第一の壁。

あと例外は拾い損ねが一番恐ろしいわけなのだけど
JAVAのように独占的な1製作者が例外クラスを統一的に設計してくれてればcatchもしやすいんだが、
MSでいえば、標準ライブラリ・MS COMラッパー・MFCなど例外乱立しててぷぎゃー。第二の壁。

デザパタとかでどうにかなる問題なのだろうか。

291 :デフォルトの名無しさん:2008/06/30(月) 02:47:24
>>290
しまった、名前のほうに番号書くべきだったみたいだな

292 :デフォルトの名無しさん:2008/06/30(月) 03:12:02
>>247Googleで例外禁止な理由読んでみた。

例外を送出するかもしれないコードを、
例外使ってないコードから利用するのは難しいからだってさ。

んで、Googleにはすでに例外を使ってないコードがたくさんあるから、
そこから新しいコードを使うことを考えると、例外は使えないと。

スクラッチから始められるなら例外使うかもしれんらしい。

293 :デフォルトの名無しさん:2008/06/30(月) 04:56:17
要するにgoogleはC++98より古いC++のコードが既に多量にあると
リファクタリングする気もないわけですな

294 :デフォルトの名無しさん:2008/06/30(月) 05:08:30
まぁ、お前が要すればそうなるんだろうな。

295 :259:2008/06/30(月) 07:19:00
>>292
横着して原文読まずスレだけ読んでたんだが、適切な説明ありがとん。
ビッグネームの言い分に立ち向かうとか、んな大袈裟な話でもなかったわけな。

296 :デフォルトの名無しさん:2008/06/30(月) 08:13:17
初期化子を理解していればお子様から抜けられるのか?

297 :デフォルトの名無しさん:2008/06/30(月) 08:29:59
>>284
> 問題があってもきちんとロールバックやリカバリを行って動作し続けなければ
> ならないような、間違ってもデータ構造更新中に中途半端な状態で放置
> してはならないような種類のプログラムで、例外機構を使って信頼性のあるコードを
> 書くのが難しいし、そのコードの例外安全性を保障することは、さらに難しいって
> 話だろ。

これの理由がわからん。なんで信頼性が変わるんだ?

例外安全性の保証についても、戻り値を使う派はエラー安全性の問題を無視して
「ほら簡単でしょ」と言っているだけのような気がする。ほんとに戻り値使ってエラー安全な
コード書いた上で比べてるのか?酷いもんだぞ。

298 :デフォルトの名無しさん:2008/06/30(月) 08:32:37
関与できない原因によって発生した例外と
プログラムが関与できる原因によって発生した例外とがごちゃ混ぜになってるから信頼性が変わるって話だろ。

299 :デフォルトの名無しさん:2008/06/30(月) 08:37:46
>>298
プログラムが関与できる・できないの区別が具体的にどんなものかわからない。
それもあって当然、それらが混ざってると信頼性が変わる理由がわからない。

もうすこし詳しい説明希望。

300 :デフォルトの名無しさん:2008/06/30(月) 08:57:30
>>296
例外処理の記述が恐ろしいほどシンプルになる。

301 :デフォルトの名無しさん:2008/06/30(月) 09:14:38
>>292
古いコードから新しいコードを使いにくいからか。
変な理由だな。

302 :デフォルトの名無しさん:2008/06/30(月) 09:18:17
インターフェースが変ったら、例外があろうがなかろうが、
新しいライブラリに置き換えるのは大変なはずだけどなw

303 :デフォルトの名無しさん:2008/06/30(月) 13:18:17
単純に考えて、CからC++のコードを呼び出す場面があるからじゃね?

304 :デフォルトの名無しさん:2008/06/30(月) 15:23:31
>>292位しか理由がないよな。

例外だとだめで返値ならOKって、んなバカな話はない。
Joelが言ってるのだって、例外を知らないバカ対策でしかない。

305 :デフォルトの名無しさん:2008/06/30(月) 17:42:57
Joelが「例外を知らない馬鹿対策」なんて低レベルな話を
してるとでも思ってるのかw
少なくともお前よりは優秀な人間しかJoelの周りにはいないだろうよ

306 :デフォルトの名無しさん:2008/06/30(月) 18:43:31
>>305
バカ対策ではない理由を挙げてくれよ。ソース付きで。

307 :デフォルトの名無しさん:2008/06/30(月) 19:10:18
毛荒れスミス対策

308 :デフォルトの名無しさん:2008/06/30(月) 19:11:48
ハゲてないよ

309 :デフォルトの名無しさん:2008/06/30(月) 20:51:49
一度深呼吸して、ゆっくり読み直してごらん。
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml


310 :デフォルトの名無しさん:2008/06/30(月) 21:09:26
compressed_pair のみ使用してもよい理由は書いてないね。

2要素のタプルは使用頻度が高い&データ数が数百億単位になる
Google では1要素あたり1バイトでも節約したいとかそんな感じだろうか?

別のエントリで shared_ptr を使おうとかいってんのになあ

311 :デフォルトの名無しさん:2008/06/30(月) 21:32:05
>>305はJoelが何者かも知らないで言ってる。

312 :デフォルトの名無しさん:2008/06/30(月) 21:51:44
http://www.joelonsoftware.com/
こいつだろ。知らない奴なんているのかよ。

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
これはアプリケーションハンガリアンの説明として有名な文書だが、
例外に関する彼の主張も書いてあるから読んどけ。

313 :デフォルトの名無しさん:2008/07/01(火) 00:11:14
>>305
Googleは社内の馬鹿対策してる会社だよ。

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.

本文や関連資料を読んでいただくとより明確に分かるが、
雇われも含めて社内のプログラマを対象とした話。



314 :デフォルトの名無しさん:2008/07/01(火) 00:11:26
いまさらググってきた成果を、>>305は得意げに晒した。
しかし、悲しいかな彼は英語を読めなかった。
それが、自らの主張を真っ向から否定する証拠そのものだと言うことを、
彼は理解出来なかったのだ。

315 :デフォルトの名無しさん:2008/07/01(火) 01:24:05
>>257

> Joel Spolskyも例外嫌いと言ってたけど
> 大体googleと同じ理由だったな

そもそもジョエル・スポルスキーはそんなこと言ってたのかという
挙げ足取りが過ぎるか。。。

プログラム板ってIDないから、どいつがどいつなのかわかんないのが不便。

316 :デフォルトの名無しさん:2008/07/01(火) 06:59:02
VisualC++でboost::uBLASが動かないんですけど何か対策はありますか?

317 :デフォルトの名無しさん:2008/07/01(火) 07:02:17
どんだけ少ない情報で質問しているのやら。
ここにエスパーはいませんよ。

318 :デフォルトの名無しさん:2008/07/01(火) 07:06:25
しかも初心者スレに誤爆してるしな

319 :デフォルトの名無しさん:2008/07/01(火) 08:07:30
VC++のバージョンが分からん上に
エラーの内容すら無いんじゃ答えようも無いな

320 :デフォルトの名無しさん:2008/07/01(火) 10:06:26
分からないなら黙っててください

321 :デフォルトの名無しさん:2008/07/01(火) 10:21:13
うん、まぁそれでもいいんだけど、
「このままじゃ全員黙ったままだよ」
っていうのを、急に親切に教えてあげたくなってねw

322 :デフォルトの名無しさん:2008/07/01(火) 10:56:09
VC++のバージョンは8.0です。
対策が無いなら良いんです。

323 :デフォルトの名無しさん:2008/07/01(火) 10:56:18
>>316
それじゃ、おいらがとっておきと対策を伝授しよう。

諦めろ。

324 :デフォルトの名無しさん:2008/07/01(火) 10:58:53
受動的問題解決策は対策とは言わない。

325 :デフォルトの名無しさん:2008/07/01(火) 11:39:16
>>316
最近>>320みたいな嵐が沸いてるから、酉つけたほうがいいぞ

326 :デフォルトの名無しさん:2008/07/03(木) 00:46:24
>>320はあまりにも釣りくさすぎるよな

327 :デフォルトの名無しさん:2008/07/03(木) 10:36:15
そういえばおかしなやりとりが増えた気がするな。
人間のクズめ。

328 :デフォルトの名無しさん:2008/07/04(金) 00:46:57
クズ同士仲良くしろや。

329 :デフォルトの名無しさん:2008/07/04(金) 18:05:48
くだらんことにレスを13(おれ含め)も使いおって
モノの聞き方を考えてから投稿しろ

330 :デフォルトの名無しさん:2008/07/04(金) 21:20:10
更新しました。
ttp://booster.x0.to/

331 :デフォルトの名無しさん:2008/07/04(金) 23:27:31
別にh抜かなくていいだろw

332 :デフォルトの名無しさん:2008/07/06(日) 17:18:09
ime.nuリンクになってエロ広告が挟まるのを嫌ったんだろう
専ブラ使って無くてもttp:をリンクに置き換えるアドオンとかあるしね

333 :デフォルトの名無しさん:2008/07/11(金) 09:11:29
BOOST_PP_SEQ_ELEMの仕組みがわかりません。
どうして BOOST_PP_SEQ_ELEM_X seq の形を最終的に x, _ にできるのかわかりません。


334 :デフォルトの名無しさん:2008/07/12(土) 03:17:02
更新しました。
ttp://booster.x0.to/

335 :デフォルトの名無しさん:2008/07/12(土) 21:33:24
boost::asio::iostreamの内部で使っているソケットにTCP_NODELAYオプションを与えて、
Nagleをオフにしたいのですが、どうやればいいのでしょうか?

336 :デフォルトの名無しさん:2008/07/14(月) 11:02:07
>>333
boost/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
という感じかと。

337 :デフォルトの名無しさん:2008/07/14(月) 15:14:45
取り出す要素が最後尾じゃない場合、後ろに残った要素はどうなるんですk

338 :デフォルトの名無しさん:2008/07/14(月) 18:31:49
>>337
この辺微妙にコンパイラ依存で分岐してるけど、
最終的には (x, _) → x みたいなやつの _ にマッチして捨てられる。
MSVC のやつだと、X=0 なら
BOOST_PP_SEQ_ELEM_III(x, BOOST_PP_NIL(y)(z)) → x

339 :デフォルトの名無しさん:2008/07/14(月) 19:10:51
やっぱりコンパイラ依存で綺麗には実装されてないか。

340 :デフォルトの名無しさん:2008/07/17(木) 22:38:11
test

341 :デフォルトの名無しさん:2008/07/17(木) 22:41:12
おお、やっと書き込めた。

ublas::vectorで、3次元ベクトルしか代入できない型って作れない?


342 :デフォルトの名無しさん:2008/07/18(金) 02:34:44
>>341
BOOST_USER: Effective UBLAS
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS

めっちゃうろ覚えだけど,固定長のublas::vectorの計算速度を測定したら,2割くらい速かったような・・・?

343 :デフォルトの名無しさん:2008/07/18(金) 15:41:21
rangeのsize関数ですけど、rangeとしてvectorを扱う想定で作って、
万が一、listが渡されてしまったらコンパイルエラーにならず、危険じゃないですか?

344 :デフォルトの名無しさん:2008/07/18(金) 16:06:34
いみがわからない

345 :デフォルトの名無しさん:2008/07/18(金) 18:42:59
>>343
実際やってみるとコンパイルエラーになるよ。

346 :デフォルトの名無しさん:2008/07/18(金) 20:47:48
そのためのイテレータの分類じゃね

347 :デフォルトの名無しさん:2008/07/18(金) 23:25:54
>>342
ありがと

348 :デフォルトの名無しさん:2008/07/19(土) 00:00:27
BOOST_PP_REPEATをネストしても自動的に深さを知って適切に取り扱ってくれる理由が、ソースを読んでもまったく分からないのですが。
一体どうやって実装しているんでしょう。
auto_rec.hppというのが謎すぎる。

349 :343:2008/07/19(土) 02:06:41
>>344-346
どもです。
size関数の実装をみたら、end-beginが0以上かどうかのエラーチェックしかなかったので、listが渡されたら?と思ったのですが、
operator-でエラーが出るのですね。

350 :デフォルトの名無しさん:2008/07/19(土) 06:19:59
更新しました。
ttp://booster.x0.to/

351 :デフォルトの名無しさん:2008/07/19(土) 06:58:46
いつも乙です

352 :デフォルトの名無しさん:2008/07/19(土) 12:03:28
Boost foreachの一種で
↓のような動作をしてくれる奴はないかしら

for(int i=0;i<max;++i)
for(int j=i+1;j<max;++j)
func(x[i],x[j]);

353 :デフォルトの名無しさん:2008/07/19(土) 12:05:33
>>352
そんな無駄なコードを使って何をさせたいのか詳しく。

354 :デフォルトの名無しさん:2008/07/19(土) 12:59:38
一瞬わからなかったけど、よく見ると確かに無駄すぎるw

355 :デフォルトの名無しさん:2008/07/19(土) 13:32:51
func(x[i], y[j])なんだよきっと

356 :デフォルトの名無しさん:2008/07/19(土) 15:56:10
ん? (i, j) の組について foreach をするってことじゃないの?
それともこのやり方ってありえないくらい無駄なの?

357 :デフォルトの名無しさん:2008/07/19(土) 16:08:21
内側のループが外側のループ制御変数に依存するし、同じ配列の二箇所を引き数にしか取れないし。

358 :デフォルトの名無しさん:2008/07/19(土) 16:22:23
ごく普通の配列演算を、なんでそんなに不思議に思っているのかわからんし、
>>352は既に自分の欲しい物を>>352で得ていると思うのだが…


359 :デフォルトの名無しさん:2008/07/19(土) 17:19:17
>>352
全域とかのように意味のある範囲指定ならあらかじめループを用意できるだろうけどそれ以外は自分でforを書くのが妥当でしょうね。

その2重のループを用意したいならそのループの意味が必要になると思う。たとえば全組み合わせをループさせるnCmやnPmやnPAImとかあるといいかも。

360 :デフォルトの名無しさん:2008/07/19(土) 17:24:23
>>358
線形代数もろくに知らない人が結構多いんじゃないの?

361 :デフォルトの名無しさん:2008/07/21(月) 15:07:36
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::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です。


362 :デフォルトの名無しさん:2008/07/21(月) 15:20:03
> 直感的に正しいようにみえる

MAJIDE?

363 :デフォルトの名無しさん:2008/07/21(月) 15:22:44
std::for_each(v.begin(), v.end(), boost::lambda::ret<boost::format>(boost::ref(fmt) % boost::lambda::_1));

364 :デフォルトの名無しさん:2008/07/21(月) 15:25:51
361です。

どうやら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));

それでは。


365 :デフォルトの名無しさん:2008/07/22(火) 10:17:25
>>341
cvector

366 :デフォルトの名無しさん:2008/07/22(火) 12:20:39
boost::asio::ip::tcp::iostreamでデータを受信したいんですけど、winsockのrecvみたいに
バッファのサイズを指定して実際に読み込んだ数を返す、の様な関数はないんでしょうか?
あるいは、
boost::asio::ip::tcp::iostream s;
//...
s.seekg(0, std::fstream::end);
std::streamsize size = s.tellg(); s.seekg(0);
みたいにしたあとに
s.readをして一気に読み込んでも仕様上正常なんでしょうか?

367 :デフォルトの名無しさん:2008/07/22(火) 12:45:41
>>366
istream に readsome() という関数があるようだが、違うかな?

368 :デフォルトの名無しさん:2008/07/22(火) 12:49:29
VS2005ではreadsomeは正常に動作しないようです。
ttp://support.microsoft.com/kb/246934/ja

369 :デフォルトの名無しさん:2008/07/22(火) 12:54:00
>>368 VS2008 がある今、さらに boost::asio の話と関係あるの?

370 :デフォルトの名無しさん:2008/07/22(火) 12:55:08
VS2008は諸事情により使えないんです。
boost::asio::ip::tcp::iostreamとistream::readsomeは関係があります。

371 :デフォルトの名無しさん:2008/07/22(火) 14:34:13
>>366
asio::streambufへソケットのread_someで読み込んで、
そのstreambufでistreamを構築するって形はどうか?

372 :デフォルトの名無しさん:2008/07/22(火) 15:23:07
>>366
boost::asio使ったこともねえくせのに口を挟むけど
要するに既に読み取り可能なデータがあれば、それだけを読んで返すような、
read(2)のようなセマンティクスで動くようなものが欲しいってこと?

iostreamはブロッキング/バッファリングI/Oのセマンティクスのライブラリだから、
それは無いんじゃねえの?
stdioにもそのような物はないしな(fread()は指定したバイト数に達するまで
いくらブロックしようが何度でもread()して粘るし、fgets()もそうだ)。

逆に言うと、まさにそういう動作が欲しいときにstdioやiostreamを使うわけで、
ネットワークプログラミングでもっと低レベルなものが欲しければ、
そんなもの使わねえだろ。
素直にもっと下の、basic_socketだか何だか知らんが、その辺を叩いたらどうだ。

それと、seekable deviceでもないものをあいてにseek()するのは流石に論外だぞ。

373 :デフォルトの名無しさん:2008/07/22(火) 15:38:41
>>372
> stdioにもそのような物はないしな(fread()は指定したバイト数に達するまで
> いくらブロックしようが何度でもread()して粘るし、fgets()もそうだ)。

つ setvbuf(3)

374 :デフォルトの名無しさん:2008/07/22(火) 15:46:00
>>373
setvbuf()でバッファリングは確かになくせるが、fread()が何度でも
read()しようとすうのはかわらんよ。

while ((n = read(fileno(stdin), buff, sizeof buff)) > 0)
  write(fileno(stdout), buff, n);

のようなループは、ttyで動かした場合に、一行入れるたびに一行echo back
してくるだろ。

fread(), fwrite()を使った場合、たとえsetvbuf()で_IONBFにしたところで、
指定したバッファサイズが埋まるまでは読み込みを繰り返そうとするから、
そういう動きにはならないよ。

375 :デフォルトの名無しさん:2008/07/22(火) 17:10:25
ISO的にはバッファリングするかどうか分からない。(処理系定義)
だからバッファリングすると仮定して書かなければならない。
もちろんバッファリングされない可能性も仮定する必要がある。

376 :デフォルトの名無しさん:2008/07/22(火) 17:21:35
>>375
え?streambuf::pubsetbuf()はれっきとした標準でしょ。
ただ、>>374にも書いたけど、バッファリングを切ることと、
istream::read()なりistream::readsome()なりが
Unixのread(2)のような動きをするかどうかは全く別の問題であって、
「read(2)を高々1回しか呼ばない」などという実装依存極まり無いことは
とうぜん仮定できないよな。

istream::read()やfread()に関しては、エラーにならない限りは指定したバイト数を
読もうとするのは*仕様*だから、read(2)とは動きが違うのは当然だ。
istream::readsome()に関しては、どういう動きをするかは、ぶっちゃけ
かなり実装依存なんじゃないか。
VC++2005のは少なくとも壊れてるんだろ?

377 :デフォルトの名無しさん:2008/07/22(火) 18:06:26
バッファリングをどのように行うかは処理系定義。
バッファを設定する関数はあるんだけど。CもC++も。
Cの方は「意図」が説明してあるんだけど、
意図に沿うかどうかは処理系定義と明記されている。
つまりバッファリングの意味が定義されてない。


378 :デフォルトの名無しさん:2008/07/22(火) 18:16:18
>>377
なるほど。何食わぬ顔をしてスルーしてもいいってことか?w

そういえば俺が以前試したとき、gccがopen済みのstreamのpubsetbuf()を
平気な顔で無視していたんで、cinやcoutのバッファリング設定を変える方法が
無かった。今はその辺は変わってるんだろうか。

379 :デフォルトの名無しさん:2008/07/23(水) 08:04:51
D言語でのImplicitConversionTargetsみたいなやつってある?
ある型を与えると、その型から暗黙変換可能な型のタイプリストを返すメタ関数なんだが

380 :デフォルトの名無しさん:2008/07/25(金) 15:58:32
boost::xpressiveで、マッチした部分列を取り出すにはどうすれば良いんでしょうか?
また、それが複数ある場合はどういう記法がなされるのでしょうか?

381 :デフォルトの名無しさん:2008/07/25(金) 16:11:15
groupみたいなのが

382 :デフォルトの名無しさん:2008/07/25(金) 16:30:06
#include <iostream>
#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;
    }
}
こんなもんじゃねえの
詳しいことはドキュメントに載ってるはずだから、自分で読んどけよ

383 :デフォルトの名無しさん:2008/07/25(金) 16:34:47
ありがとうございます。死んでも死にきれません。

384 :デフォルトの名無しさん:2008/07/25(金) 17:28:59
ここ2年ぐらいのboostで変わった点を把握したい

以前に良く使ってたのは数値計算とメタ制御関係で
ublas
MPL
lambda
bind
accumulator
mult_array
gil

関連しそうなので新しく出て有用そうなlibraryって何かありますでしょうか?

385 :デフォルトの名無しさん:2008/07/25(金) 18:21:55
compressed_pair

386 :デフォルトの名無しさん:2008/07/25(金) 20:06:33
progress_bar

387 :デフォルトの名無しさん:2008/07/25(金) 20:12:31
fusion
multi_index
asio(Asynchronous I/O)
iostreams
serialization

388 :デフォルトの名無しさん:2008/07/25(金) 21:27:52
range

389 :デフォルトの名無しさん:2008/07/26(土) 08:40:22
更新しました。
ttp://booster.x0.to/

390 :デフォルトの名無しさん:2008/07/26(土) 08:46:20
これなに?

391 :デフォルトの名無しさん:2008/07/26(土) 08:50:13
BoostPro Binary Installer for Visual C++

http://www.boostpro.com/products/free

どっちがいい?

392 :デフォルトの名無しさん:2008/07/26(土) 08:56:29
自分でビルドすりゃあいい。

393 :デフォルトの名無しさん:2008/07/26(土) 10:48:47
やっぱ外人がホームページやってる方が信頼性がありそう

394 :デフォルトの名無しさん:2008/07/26(土) 10:58:49
そうかね

395 :デフォルトの名無しさん:2008/07/26(土) 11:23:39
そうだね

396 :デフォルトの名無しさん:2008/07/26(土) 11:56:26
そうだろうか

397 :デフォルトの名無しさん:2008/07/26(土) 12:26:27
自分が使うコンパイラでビルドするのがいろいろ楽じゃね?

398 :デフォルトの名無しさん:2008/07/26(土) 14:33:38
自分でビルドするのは電気代の無駄だよ。
同じコンパイラ用のバイナリが既に配布されてればそっちを使った方がいい。

399 :デフォルトの名無しさん:2008/07/26(土) 14:50:42
テンプレートバリバリのboost使ってプログラミングするのは電気d(ry

400 :デフォルトの名無しさん:2008/07/26(土) 14:55:42
boost、STLは生産性が高まるからで近代安い

401 :デフォルトの名無しさん:2008/07/26(土) 14:59:32
boostをビルドする電気代なんてケチってもジュース一本も飲めやしない

402 :デフォルトの名無しさん:2008/07/26(土) 15:54:02
電気代を節約するならC++を使うべき
環境にやさしいプログラマー

403 :デフォルトの名無しさん:2008/07/26(土) 16:09:50
embedded C++のことですねわかります

404 :デフォルトの名無しさん:2008/07/26(土) 17:38:45
そういえばコンパイルが爆速なのが売りの言語があったな。 なんだっけ、デルフ……おやこんな時間に誰か来たようだ

405 :デフォルトの名無しさん:2008/07/26(土) 20:36:55
boost::asioのhost_nameがクライアントホスト名ではなくて別の文字列を返すんですが、
クライアントホスト名を得るにはどうすればいいんでしょうか。

406 :デフォルトの名無しさん:2008/07/26(土) 20:39:01
デルフリンガーですね、わかります。

407 :デフォルトの名無しさん:2008/07/26(土) 21:44:16
よお相棒


408 :デフォルトの名無しさん:2008/07/27(日) 10:42:03
デスブリンガーと空目した

409 :デフォルトの名無しさん:2008/08/01(金) 18:46:54
boost::asioでバイナリプロトコルでやりとりするサンプルありませんか?
httpやftpのサンプルしか見つからないので・・・

410 :デフォルトの名無しさん:2008/08/01(金) 19:42:21
バイナリプロトコルで具体的に何をしたいのか

411 :デフォルトの名無しさん:2008/08/01(金) 21:59:10
>>410
Cっぽく書くと下のような感じです。

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 *が取り出せるかと
思ったけど取り出せなかったので適当なサンプルがほしいと思ったわけです。

412 :デフォルトの名無しさん:2008/08/01(金) 22:22:52
つーかstreambufインタフェース使えるんなら別にboost::asio関係ねくねーか?
iostream/streambufでバイナリ入出力をやる方法はわかってるの?

413 :デフォルトの名無しさん:2008/08/01(金) 22:27:05
更新しました。
ttp://booster.x0.to/

414 :デフォルトの名無しさん:2008/08/01(金) 22:28:40
>>411
streambufがあるなら、そこからistream/ostreamを構築して、
istream/ostreamのメンバのread/writeを使ったらどう?
read/writeはstdioでいうところのfread/fwrite相当のバイナリ読み書きのメンバ関数。

たぶん、streambufだとsgetn/sputnがそれにあたるんだと思うんだけど
使ったことないから自信ないんだ、すまん。

415 :デフォルトの名無しさん:2008/08/01(金) 22:30:26
>>414
> streambufだとsgetn/sputnがそれにあたるんだと思うんだけど
それで合ってる。
ただ、void*じゃなくてchar*ベースなので、要reinterpret_cast
iostreamのread()やwrite()も同じだね。

416 :デフォルトの名無しさん:2008/08/08(金) 15:54:16
質問です。

VS2008
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>>'
の参照を確認してください

これは何が悪いんでしょうか?
ライブラリの中からエラーを吐かれたので正直途方にくれています。

417 :デフォルトの名無しさん:2008/08/08(金) 19:55:12
更新しました。
ttp://booster.x0.to/

418 :デフォルトの名無しさん:2008/08/08(金) 20:07:46
>>416
#includeはネームスペースの外だよね?

419 :デフォルトの名無しさん:2008/08/09(土) 09:47:30
とりあえず>417のver1.36に差し替えたらクリアできたようです。
ありがとうございます。

>418
グローバル名前空間でincludeしてます。

ちなみに、 map<int, classOb*> みたいな感じのコンテナで
ポインタの先のオブジェクトの実体まできちんとシリアライズできるかを確かめたかったのですが
ちょっとコード書いてみた限りでは問題無さそうです。

ただ、なんか足元が不安定な気がして怖いですが。
テキスト出力・バイナリ出力はできたけどxmlだとコンパイルエラーを吐くとか。
xml使わないから別にいいけど

420 :デフォルトの名無しさん:2008/08/09(土) 20:18:20
>>419
xmlはmake_nvpに<や>を使うとエラーになるね。そんでテンプレートを派生元にしたときにBOOST_SERIALIZATION_BASE_OBJECT_NVPを使うと思わず引っかかってしまう。

421 :デフォルトの名無しさん:2008/08/10(日) 20:38:19
質問です。

http://www.boostpro.com/products/free
で boost_1_35_0 を自動ビルドしたものを Microsoft Visual C++ 2008 に
「インクルードファイル」
「ライブラリファイル」
として登録しています。

で、いろいろとboost関係のポップアップが出るのですが・・・・・・形が違う orz

例:本家のページやboostについていた解説htmlだと「boost::regex」
となっているものが、vcのポップアップだと「boost::RegEx」

また、本家に書いてあるものがポップアップには表示されず、本家の通りに書いて
ビルドすると「そんなものは無い!」と叱られます。
どこをどう間違えたのか・・・。

422 :デフォルトの名無しさん:2008/08/10(日) 20:44:50
>>421
そーすぷりーず

423 :デフォルトの名無しさん:2008/08/10(日) 20:52:58
>>422

あ・・・ソースと言われて気づいたことが。

もしや
#include <boost/regex.h>

#include <boost/regex.hpp>
の差?

ソース見たら#include <boost/regex.h>でした。
今、#include <boost/regex.hpp>に変えたらポップアップの中身が変わりました。
・・・・・・・・・・・・・・('A`)小文字のregexがありました。

424 :デフォルトの名無しさん:2008/08/10(日) 20:57:35
>>423


失礼。これは間違い。
「実行可能ファイル」 の登録が原因。

おさわがせしました。

425 :デフォルトの名無しさん:2008/08/10(日) 21:05:20
すみません。
冷静に登録の違いと「.hpp」「.h」の違いを一つずついじってみました。
どうも>>423のほうが正解かと。


426 :デフォルトの名無しさん:2008/08/10(日) 21:19:35
boost::RegExってこれか。紛らわしいな。
ttp://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

427 :デフォルトの名無しさん:2008/08/12(火) 10:41:36
クオータニオンをマトリックスに変換したり、マトリックスの逆行列を求めたり
マトリックスやベクトルをくクオータニオンで回転する機能ってある?

いま一つ算術系の使い勝手が分からない・・・orz

428 :デフォルトの名無しさん:2008/08/12(火) 11:57:17
巨大な(100x100とかの)行列用途ならboost::uBLAS。 クォータニオンは多分ないけど。
そうでないなら大人しくDirect3DXとか自作のライブラリとか使っとけ。

その辺の所のスタンダードは俺もちょっと欲しいと思っているが、
CPU依存の最適化方法が色々あるからちょっと難しいのかもね。

429 :デフォルトの名無しさん:2008/08/12(火) 12:02:33
#include <boost/math/quaternion.hpp>

430 :デフォルトの名無しさん:2008/08/12(火) 12:25:07
取りあえずベクトルやマトリックスについていろいろベンチとってD3DXと比べてみるわ
あんまり環境依存のライブラリ使いたくないんだけどな
レスサンクス

431 :デフォルトの名無しさん:2008/08/12(火) 12:41:53
boostにあれば便利なんだけど、3次元くらいまでのベクトルだったら自分で作るの可だし。

432 :デフォルトの名無しさん:2008/08/12(火) 12:57:20
自分で作ると効率悪いだろ?いろんな意味で

433 :デフォルトの名無しさん:2008/08/12(火) 12:58:01
四元数は3x3行列に特化したものだし、応用が限られてるからな。
三次元の回転の処理には非常に便利だが。

434 :デフォルトの名無しさん:2008/08/12(火) 13:24:10
その3x3だけ対応でいいから作ってほしい
後3次元ベクトルの回転も

そのくらいの実装だったら自分で出来るかな・・・いや無理ですorz

435 :デフォルトの名無しさん:2008/08/12(火) 13:28:44
クオータニオン→行列
とか
クオータニオンでベクトルを回転
とかググればすぐに見つかるだろw

436 :デフォルトの名無しさん:2008/08/12(火) 13:33:51
ていうか >>429 で出てるけど四元数そのものはあるよ

437 :デフォルトの名無しさん:2008/08/12(火) 13:40:43
それのマトリックスやベクトルとの連携の話をしてるんだが

438 :デフォルトの名無しさん:2008/08/12(火) 13:41:38
実装自体はできるだろうけど高速化は無理です

439 :デフォルトの名無しさん:2008/08/12(火) 15:10:00
自分で作ると効率悪いだろ?いろんな意味で

440 :デフォルトの名無しさん:2008/08/12(火) 20:12:40
クォータニオンを使う前にまずジンバルロックでハマるのが通過儀礼

441 :デフォルトの名無しさん:2008/08/12(火) 20:20:15
自分でやりたいんじゃなきゃ、出来る技量がなければ、
boostじゃなくてG3Dとか使えばいいんじゃないの?

442 :デフォルトの名無しさん:2008/08/12(火) 21:10:00
行列の内部表現とかベクトルにマトリクス掛ける方向とか
描画ライブラリごとに違うからな。
もし作るにしても filesystem とか thread みたいになるんじゃね?

443 :デフォルトの名無しさん:2008/08/13(水) 09:25:42
boost::anyに固定配列入れたいんですけどどうしたらいいですか?
コンパイルエラーになります
'any::holder<ValueType>::any::holder<ValueType>::held' : クラス、構造体、共用体のメンバは、初期化できません。

444 :デフォルトの名無しさん:2008/08/13(水) 09:35:47
そこでboost::arrayですよ

445 :デフォルトの名無しさん:2008/08/13(水) 09:36:07
anyは本当になんでも入れられるわけじゃないぞ。

>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] ;
} ;

446 :デフォルトの名無しさん:2008/08/13(水) 16:04:52
>>445
おっしゃるとおりですね。ありがとう。
>>444
boost::arrayで実装しました。ありがとう。

447 :デフォルトの名無しさん:2008/08/13(水) 20:41:52
1.36.0 きた?
ttp://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041&release_id=619445

448 :デフォルトの名無しさん:2008/08/13(水) 21:06:46
ここ一週間位SVNの更新規模がガクンと減っていたから、正式リリースの前触れかなと思っていたが
当たりだったみたいだね。

449 :デフォルトの名無しさん:2008/08/13(水) 22:05:30
もう1.36.0出るのか。
こないだ1.35.0入れたばっかだってのに

450 :デフォルトの名無しさん:2008/08/13(水) 22:13:40
boost::testのsync_access_testがどいつもこいつもfailureなのが気になるのぅ

451 :デフォルトの名無しさん:2008/08/13(水) 22:28:35
おおお来たか
まだ、ダウンロード数が0だな。
みんなトップからリンクされるの待ってるのかな?

トップからリンクされるまで、のんびりと何が変わったか確認するかな。

452 :デフォルトの名無しさん:2008/08/13(水) 22:30:18
何がバージョンアップされたんだろう。
またビルドするの面倒臭いな。あれ俺の低脳PCだと1時間くらいかかるんだぜ。

453 :デフォルトの名無しさん:2008/08/13(水) 22:43:54
>>452
使うものだけに絞ればその分時間かからないよ。
全部使うわけではないだろ。

454 :デフォルトの名無しさん:2008/08/14(木) 01:01:13
UnorderedとかのTR1まわりとバージョンアップを除くと、
完全新規はAccumulatorsとExceptionとUnitsくらいか?

Unitsはテンプレートの使われ方としては目新しいものじゃないが、Boostに入ったことできっと流行る。

455 :デフォルトの名無しさん:2008/08/14(木) 08:29:39
boostって事前にビルドするものあったっけ?

456 :デフォルトの名無しさん:2008/08/14(木) 09:35:32
windowsだとlibなどをそろえる為の作業が必要
他は知らん

457 :デフォルトの名無しさん:2008/08/14(木) 09:46:04
Linuxの場合だと、boostのパッケージがあったりして、コンパイル作業は必要無い場合がある。

boost::systemとかboost::filesystemとかasioとかシリアライゼーションとかはライブラリのコンパイルが必要。
また「boost::filesystemはboost::systemを利用する」みたいな依存関係がある場合があるので、
ライブラリは全部コンパイルしとけばおk

458 :デフォルトの名無しさん:2008/08/14(木) 10:05:26
つまり、私みたいにテンプレート関連しか使わない場合は事前ビルドは要らないのです。

459 :デフォルトの名無しさん:2008/08/14(木) 11:41:10
boostのコンパイルなんて十分もかからんし

460 :デフォルトの名無しさん:2008/08/14(木) 11:51:42
Windowsでも
http://www.boostpro.com/products/free
があるし。
最近は自分でビルドしなくていいようになってきた。

461 :デフォルトの名無しさん:2008/08/14(木) 12:02:05
ビルドなんてSTLPortのiostreamくらいしかしたことないや

462 :デフォルトの名無しさん:2008/08/14(木) 12:52:01
ビルドといってもコマンドライン一行だけで10分くらいで終わるし。そんなに構えることは無いよ


463 :デフォルトの名無しさん:2008/08/14(木) 13:41:15
リンクエラーが出てからビルドしても遅くは無い

464 :デフォルトの名無しさん:2008/08/14(木) 19:15:15
変更点はとりあえずここ参照かな
ttp://beta.boost.org/users/news/version_1_36_0

465 :デフォルトの名無しさん:2008/08/14(木) 21:49:34
boost::unitって何かと思ったらSI単位系か。 なんかの本の例題では見たことあるけど確かに今までなかったな。

boost::exceptionはなかなか面白いよ。
例外をcatch-throwで受け流す途中で情報を追加していくことができる。

466 :デフォルトの名無しさん:2008/08/14(木) 23:04:19
optionalとtestが相変わらずテスト通らない
マルチスレッドは鬼門だな

467 :デフォルトの名無しさん:2008/08/15(金) 00:52:34
そういえばsignalってスレッドセーフなのか?


468 :デフォルトの名無しさん:2008/08/15(金) 06:16:25
sandboxにスレッドセーフな実装が載ってる

469 :デフォルトの名無しさん:2008/08/15(金) 17:15:41
3GHzのPCでライブラリのビルドが5時間かけても半分も終わらないんだが
どうやったら10分以下で終わるんだ?

470 :デフォルトの名無しさん:2008/08/15(金) 17:20:55
tmpfs + マルチコア

471 :デフォルトの名無しさん:2008/08/15(金) 18:57:07
更新しました。
ttp://booster.x0.to/

>>469
もしかしたら私と同じトラブルかもしれませんので、>>108以降を参照して頂ければ。

472 :デフォルトの名無しさん:2008/08/15(金) 20:53:09
1.36がトップに来たね
ハッシュコンテナ!ヤッター

473 :デフォルトの名無しさん:2008/08/15(金) 21:01:06
>>468
boost/sandbox/に見つけましました。ありがとう
boostって何でもあるね

474 :デフォルトの名無しさん:2008/08/16(土) 19:57:41
さあboost::unordered_mapとstd::mapの比較ベンチを早く貼るんだ

475 :デフォルトの名無しさん:2008/08/16(土) 20:46:50
SVN使っている奴はすでにunordered_setぐらい試してるだろ。
安心しろ。
BoostのUnordered associative containersの実装はとても速い。
Dinkumwareとは比べ物にならん。

476 :デフォルトの名無しさん:2008/08/16(土) 21:17:20
boost::unordered_map?なにそれ

477 :デフォルトの名無しさん:2008/08/16(土) 21:22:11
setがありゃmapもあってしかるべきだろ。
TR1のドラフトぐらい読んでこいよ
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

478 :デフォルトの名無しさん:2008/08/17(日) 02:01:29
>>476
ttp://codezine.jp/a/article/aid/2171.aspx?p=2

479 :デフォルトの名無しさん:2008/08/19(火) 08:57:04
皆さんboostとTR1の両方存在するライブラリはどちらを使ってます?

480 :デフォルトの名無しさん:2008/08/19(火) 08:59:07
boost
大文字嫌い。

481 :デフォルトの名無しさん:2008/08/19(火) 09:01:26
boostとTR1のライブラリが、両方存在する場合は、どちらを使ってます? だろ。
C++の前に日本語使えるようになろうな。

482 :デフォルトの名無しさん:2008/08/19(火) 10:56:30
>>481
>>479でも別に正しいだろ。
>>481は自分を中心に世界が回っていると思っている馬鹿。

483 :デフォルトの名無しさん:2008/08/19(火) 11:10:17
正しくはないと思うが・・・
いちいち上げ足とる奴もどうかと思うな

484 :デフォルトの名無しさん:2008/08/19(火) 11:28:16
同じライブラリ(関数やクラス、例えばunordered_map)がboost内にもtr1内にもあるけど、どっち使ってる?
という意味でしょ?
tr1ってのがどの実装のことを指しているかにもよると思うけど。


485 :デフォルトの名無しさん:2008/08/19(火) 12:06:20
本人だが
boostとTR1の両方「に」存在するライブラリ
と書くつもりだったんだ。
すまんね

486 :デフォルトの名無しさん:2008/08/19(火) 12:06:44
皆さんboostとTR1に両方存在するライブラリのどちらを使ってます?
なら問題ない

487 :デフォルトの名無しさん:2008/08/19(火) 12:11:01
しつこい

488 :デフォルトの名無しさん:2008/08/19(火) 12:45:41
tr1よりboostのほうがタイプしやすいからboost使ってる

489 :デフォルトの名無しさん:2008/08/19(火) 13:50:35
tr1ってなんか暫定的な感じがしすぎて微妙。
boostのほうが完全に公式でないが明確に拡張ライブラリを入れてる感があってスッキリする。
表現しにくいが何となくそんなイメージ

490 :デフォルトの名無しさん:2008/08/19(火) 14:21:07
とりあえずC++0x来るまではboostの予定

491 :デフォルトの名無しさん:2008/08/19(火) 18:08:38
来るの?

492 :デフォルトの名無しさん:2008/08/19(火) 18:24:15
C++0Aだからまだ先だな。

493 :デフォルトの名無しさん:2008/08/19(火) 21:32:33
tr1のライブラリの名前空間てtr1のままなの?
いずれstd空間に入らないのかな

494 :デフォルトの名無しさん:2008/08/20(水) 02:51:55
入る候補がTR1。
けど俺は階層にして欲しい。
stdに入るものが、C++XXのXX違いで変るのはやめて欲しい。

495 :デフォルトの名無しさん:2008/08/20(水) 08:43:41
1.36でfilesysytemの仕様が変わったのか。
前のコードがそのままだとコンパイル通らなかった

496 :デフォルトの名無しさん:2008/08/20(水) 19:38:05
すみません。教えてください。
471さんのリンク先の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



497 :デフォルトの名無しさん:2008/08/20(水) 20:09:05
link-runtime=static

498 :496:2008/08/20(水) 20:17:47
>>497
早速ありがとうですううううううう。やってみます。

499 :496:2008/08/21(木) 07:21:42
正しくは
runtime-link=static
でした。うまくいきました。ありがとうございました。

500 :デフォルトの名無しさん:2008/08/22(金) 18:08:11
更新しました。SVNは1.37に移行しております。
ttp://booster.x0.to/

>>496
申し訳ございません。staticも作れていたと勘違いしておりました。
VSやSDKの情報も含めてbuild.txtも更新致しました。

そしてビルド時間が2倍に・・・。

501 :496:2008/08/22(金) 20:35:29
何か役に立ったみたいで嬉しいな。

502 :デフォルトの名無しさん:2008/08/23(土) 12:26:36
1.36になってインテリセンスとの相性がめちゃめちゃ悪化しとる・・・

503 :デフォルトの名無しさん:2008/08/23(土) 12:40:05
ncb作り直してもだめ?

504 :デフォルトの名無しさん:2008/08/23(土) 15:13:34
>>503
ダメ。
どうもヘッダ組み込んだだけでその後全部死ぬっぽい?
どのヘッダが問題なのかまでは調べてないが。

あと新しく増えたunorderedもオブジェクト宣言したとこから死ぬ。
1.35に戻してtr1のunorderedを使うことにします・・・

505 :デフォルトの名無しさん:2008/08/23(土) 15:34:16
うちの所では死なないが
boostを一番にインクルードしてるけどね

506 :デフォルトの名無しさん:2008/08/23(土) 16:49:49
unorderedなんてかなり昔からSVNから引っ張ってきて使ってるが、
インテリセンスが壊れたことは無いぞ。

507 :デフォルトの名無しさん:2008/08/23(土) 17:41:28
>>502
C++/CLIと併用してない?

508 :デフォルトの名無しさん:2008/08/23(土) 21:03:14
>>505-505
そうなの?ウチだけなの?
あとunorderedは1.35にぶち込んで使ってみたので、そのせいかもしれない。
でもtr1のunoderedの方がVCのデバッガとも相性は良いね。
普通の配列と同じように表示されるし。

>>507
してません

509 :デフォルトの名無しさん:2008/08/23(土) 21:17:30
spirit使ってるとIntelliSenseが反応してくれないんです><

510 :デフォルトの名無しさん:2008/08/23(土) 21:26:53
bindでインテリセンスが効くがあまり嬉しくない。

511 :デフォルトの名無しさん:2008/08/24(日) 14:57:06
BOOST_PP_LIST_ENUM の区切り文字を変更できない?
セミコロンにしたいんだが。

BOOST_PP_LIST_FOR_EACH だと、
a;b;c;d;
みたいに最後にもセミコロンが付いてしまう。

512 :デフォルトの名無しさん:2008/08/24(日) 15:12:25
>>511
http://svn.boost.org/trac/boost/browser/trunk/boost/preprocessor/list/enum.hpp
に実装があるからそれを真似すればいい
たった二行で済む簡単な定義

513 :デフォルトの名無しさん:2008/08/24(日) 15:15:49
>>348
いまさらだが
マクロ展開後の再スキャン中は、そのマクロの展開が禁止されるので、
それを利用して「自分があるマクロから(間接的に)呼ばれたかどうか」が判定できる

514 :デフォルトの名無しさん:2008/08/24(日) 16:08:17
unorder_set
プリコンパイルヘッダがきかねー

515 :デフォルトの名無しさん:2008/08/24(日) 16:10:41
unordered_set/unordered_mapってメモリ占有領域はどうなってんの?

516 :デフォルトの名無しさん:2008/08/24(日) 16:35:49
>>511
ありがと

517 :デフォルトの名無しさん:2008/08/24(日) 16:48:26
>>515
vectorより多くなるが、mapやsetよりはポインタの分少なくなるっぽい?


518 :デフォルトの名無しさん:2008/08/24(日) 17:10:15
ハッシュテーブルが必要だからでかくなるんじゃないの

519 :デフォルトの名無しさん:2008/08/24(日) 17:17:20
ですよねー

520 :デフォルトの名無しさん:2008/08/28(木) 21:59:34
空飛ぶスパゲティーモンスターはrejectかな…

521 :デフォルトの名無しさん:2008/08/29(金) 11:25:40
PyUblasが便利なんだけど作者があきたらboostのバージョンあがったとたん動かなくなる可能性あるんだよね
ctypes使ったほうが安心なのかな

522 :デフォルトの名無しさん:2008/08/29(金) 11:31:54
Creative Commons Attribution-Share Alike 2.5 Licenseだから、
利用者が多ければ、誰かが維持してくれるんじゃないのかな。


523 :デフォルトの名無しさん:2008/08/29(金) 15:59:27
GNUの非主流ソフトが辿る末路を見ていれば、それが幻想だということは分かるはず

524 :デフォルトの名無しさん:2008/08/29(金) 18:41:04
更新しました。
ttp://booster.x0.to/

525 :デフォルトの名無しさん:2008/08/30(土) 14:24:35
PyUblasがboost.pythonにとりこまれれば安心なのに

526 :デフォルトの名無しさん:2008/08/30(土) 19:45:50
1.36入れてみたんだけど、get_posix_categoryあたりでリンクエラーに
なっちゃうなあ。ソース直せばいけるっぽいけど・・1.35使ってた方が無難?

527 :デフォルトの名無しさん:2008/08/31(日) 20:52:49
boost に dirname とか basename 的な関数ってある?どこかわから

528 :デフォルトの名無しさん:2008/08/31(日) 22:25:49
boost::filesystemが内包してるんじゃないの
少なくともbasenameはconvenience.hppにある

529 :デフォルトの名無しさん:2008/09/01(月) 04:23:02
>>528
ありがとう!
でも dirname がないなぁ。basename も basename じゃなくて、
拡張子抜きファイル名の意味みたいだし。ふーむ。
ttp://www.boost.org/doc/libs/1_36_0/libs/filesystem/doc/reference.html

530 :527:2008/09/01(月) 04:30:22
basename は leaf() か。
dirname は branch_path().native_file_string() みたいな?
うーん、、、、なんだろうこのセンス。branch_path、、、なにを意味したいのか・・・・
とにかくありがと!

531 :デフォルトの名無しさん:2008/09/01(月) 21:25:04
そもそもディレクトリがあって、ファイルがあって・・・
という常識から疑うんだ

世の中は広い

532 :デフォルトの名無しさん:2008/09/01(月) 22:37:30
順編成ファイルとか区分編成ファイルとかあったね。


533 :デフォルトの名無しさん:2008/09/02(火) 00:32:41
Hotfix patch だそうな。
ttp://svn.boost.org/trac/boost/wiki/ReleasePractices/HotFixes

534 :デフォルトの名無しさん:2008/09/02(火) 12:37:52
unordered/detail/hash_table.hppの265行目で使われてるhash_table_unique_keysってどこで宣言されているんですか?
VCの機能の「宣言へ移動」をやっても見つからないし、boostフォルダをGREPで検索しても見つかりません。
どういうこと?

535 :デフォルトの名無しさん:2008/09/02(火) 12:46:27
そういうこと。

536 :デフォルトの名無しさん:2008/09/02(火) 13:31:52
hash_table_impl.hppのclass BOOST_UNORDERED_TABLEじゃないの?

537 :デフォルトの名無しさん:2008/09/02(火) 13:39:05
そういうこと。

538 :デフォルトの名無しさん:2008/09/05(金) 11:29:09
>>513
うーん、さっぱりわからない。
実装方法が分からなくても、BOOST_PP_REPEAT自体を使うのは簡単だからいいか。

539 :デフォルトの名無しさん:2008/09/05(金) 21:53:45
更新しました。
ttp://booster.x0.to/

今回のビルドから、svn管理用ファイルを完全に取り除く様にしました。

540 :デフォルトの名無しさん:2008/09/12(金) 18:42:56
更新しました。
ttp://booster.x0.to/

541 :デフォルトの名無しさん:2008/09/12(金) 22:19:40
>>540
最新版ちゃんとビルドできましたよ。 なんか同じファイルが2つずつ入ってます。 
あとマルチスレッド用のスタティックライブラリだけあれば十分ではないですか?
シングルスレッドで動かしても、使えるので。性能に多少違いがあるのかもしれないですが。
別々に分けてうpしてあれば各自で選べますけど。

542 :デフォルトの名無しさん:2008/09/12(金) 22:31:29
そもそも、もはやMSVCにシングルスレッドのランタイムは無いわけだが。

543 :デフォルトの名無しさん:2008/09/13(土) 00:00:12
こんなに小さくなりました。 7Mです。 デバック用は入ってないですが。 リリースならこれだけで動きます。
http://ponyo.no-ip.org/uploader/src/10P0186.zip


544 :デフォルトの名無しさん:2008/09/13(土) 00:30:38
540であがっている物の機能が失われない範囲で不要ファイルを削除して
再圧縮したら28Mで済みましたよ。 デバッグ用のLIBが21M食ってて重いです。

545 :デフォルトの名無しさん:2008/09/13(土) 00:43:50
BCBのboostも上げてほしいです。 コンパイルがうまくできないです。

546 :デフォルトの名無しさん:2008/09/13(土) 01:02:26
ライブラリは全てマルチスレッド(...-mt...)です。内訳は、
boost...-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...が何用なのか分かりません。

547 :デフォルトの名無しさん:2008/09/13(土) 01:03:23
>>546の続き
ビルドはマルチスレッドのフルセット
bjam --toolset=msvc -a runtime-link=static,shared threading=multi release debug stage
で行い、出来上がったもの+ヘッダを全てrarにパックしております。
とりあえずは良く分からないままあれこれ削除するよりは、全部入りで提供して
使われる方の方で削って貰うのが良いと考えておりますが、明らかに不要な物があれば教えて頂けましたら対応致します。


548 :デフォルトの名無しさん:2008/09/13(土) 01:14:13
Windows boost binaryを提供している外人のページ
http://www.boostpro.com/products/free
でそのインストーラーと実際にインストールされるファイルを比較すると

-sがつくのがシングルスレッド用で、-gdがデバッグ用みたいです。
バージョンタグ無しと、バージョンタグ有りは、完全に同一ファイルであって
ヘッダから呼び出されるのはタグ有りの方だけです。

549 :デフォルトの名無しさん:2008/09/13(土) 01:22:31
すみません。間違えいるかもしれません。
確実なことは、バージョン付きと付いていないやつは、バイナリレベルで完全に一致しています。
あと、バージョン付いてない方を読ませても読み込まないです。


550 :デフォルトの名無しさん:2008/09/13(土) 01:28:12
やはりboost proの人はインストーラで-s付きはシングルスレッド用としてます。
でも、>>546を見ると別のことが書いてあるし判らないです。

551 :デフォルトの名無しさん:2008/09/13(土) 01:34:47
>>546
-sが付いているのは、CRTに静的リンク(libcmt.lib使用)で、
ないほうは、CRTに動的リンク(msvcrXX.lib/msvcrXX.dll使用)だったはず。
-gdと-sgdはもちろんデバッグ版のCRT (libcmtd.libとmsvcrXXd.*)を使う。

552 :デフォルトの名無しさん:2008/09/13(土) 01:46:39
コンパイル時のオプションによっては、バージョン無しが呼ばれる可能性もあるかもしれないですね
すみません。現状維持がいいみたいです。

553 :デフォルトの名無しさん:2008/09/13(土) 01:56:25
バージョン指定の有り無しの2ファイルは、
NTFS上ならハードリンクか何かにできれば理想的だよね。

554 :デフォルトの名無しさん: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
コンパイル絡みで問題が出ないなら、ハードリンクでかなりファイルサイズを圧縮出来そうですね。
ハードリンクは全く使った事が無いのでこれから使い方を調べなければなりませんが、
間に合えば次回か次々回辺りのビルドで採用してみます。

555 :デフォルトの名無しさん:2008/09/13(土) 03:52:52
rarってハードリンク扱えるの?

556 :デフォルトの名無しさん:2008/09/13(土) 03:59:01
ぐぐれ

557 :デフォルトの名無しさん:2008/09/13(土) 10:39:03
ハードリンク作るbatを同梱しておけばいいじゃん

558 :デフォルトの名無しさん:2008/09/13(土) 13:13:05
バージョン有りのみで配布して、コンパイルが失敗するか人柱やってもらう。

559 :デフォルトの名無しさん:2008/09/13(土) 15:48:21
バージョン無しのファイルをコピーするバッチファイルを同封しておいて
解凍後、最後に起動させれば配布サイズが小さくなると思う。

560 :デフォルトの名無しさん:2008/09/14(日) 02:51:25
いつも
ありがとう
ございます

561 :デフォルトの名無しさん:2008/09/14(日) 08:11:32
2桁目を縦読みか?

562 :デフォルトの名無しさん:2008/09/15(月) 12:52:41

boost.eggってどこにあるの?

563 :デフォルトの名無しさん:2008/09/15(月) 13:14:05
boost vaultかsourceforge.netのpstade libraryのリポジトリ

564 :デフォルトの名無しさん:2008/09/16(火) 00:52:09
29: error: no matching function for call to ‘regex_replace(const char
[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 }

565 :デフォルトの名無しさん:2008/09/16(火) 01:58:21
regex_replace(string("testeee2"),comp,string("abeeeec"));

566 :デフォルトの名無しさん:2008/09/16(火) 02:01:01
オーバーロード解決に失敗してるね

567 :デフォルトの名無しさん:2008/09/16(火) 17:25:29
pyublas便利かなって思ってたけど、よく考えたらjson形式のtextデータにしてctypesにtextデータ渡せばそっちのほうが汎用性高いな

568 :デフォルトの名無しさん:2008/09/16(火) 20:14:46
効率は悪くないかい?

569 :デフォルトの名無しさん:2008/09/16(火) 20:33:50
効率を気にするならpython使わないし
でも大丈夫少なくともrubyやelispよりは効率良いと思うよ

570 :デフォルトの名無しさん:2008/09/16(火) 22:53:33
インタプリタ書き換えてrubyの方が速くなったぽいよ

571 :デフォルトの名無しさん:2008/09/16(火) 23:15:11
やっぱりだれか作ればBoost.Rubyとかできるもんなんだよな、きっと。

572 :デフォルトの名無しさん:2008/09/16(火) 23:24:55
すみません。ひとつご教授いただきたく。

現在boost::asioを使って遊んでいます。
で、せっかくなのでip::tcp::streamでクライアント - サーバー間の通信ものを作ったんですが、
このストリームに対してタイムアウト値の設定ってできないものでしょうか。

socketに対してならハンドラでフツーに定義できましたが、
streamを使用してみたいなぁと思いまして。

573 :デフォルトの名無しさん:2008/09/17(水) 04:18:31
すみません、
Graph 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のインストールに詳しいサイトあったら教えてくだされ…

つかれたよーママン!





574 :デフォルトの名無しさん:2008/09/17(水) 04:52:55
MPIなんて使ったことが無いが、詳しいサイトなんて、
そりゃBoost公式サイトと、各MPI実装の公式サイトに決まっているだろ。
試すならBoostでテストされているとドキュメントに記されている三つから選べばいいだろ。

575 :デフォルトの名無しさん:2008/09/19(金) 00:44:28
pyublasってどういう場面で使っているの?
ublasとnumpyを混ぜて使うメリットが今一歩分からない

576 :デフォルトの名無しさん:2008/09/19(金) 10:06:42
numpyはplotやデータ生成

生成したデータをublasのプログラムに流し込む

結果をさらにnumpyでplot

577 :デフォルトの名無しさん:2008/09/20(土) 05:04:24
更新しました。
ttp://booster.x0.to/

バージョンタグ無しライブラリをユーザー側で作成する様に変更する事により、ファイル容量を削減致しました。
バッチファイルを2種類同梱しており、実体を作成するかハードリンクを作成するかお好きな方をお選び頂けます。

578 :デフォルトの名無しさん:2008/09/20(土) 10:17:44
超乙津

579 :575:2008/09/20(土) 11:18:07
>>576
なるほど! plotやらにpython使うのは確かに便利だ
pyublasでリンクする手間が凄く小さいならだけど
試してみるかな
レスサンクス!

580 :デフォルトの名無しさん:2008/09/22(月) 16:36:41
>>573
MPIならとりあえずmpichでぐぐれ
ただ、MPIは並列処理といってもコアレベルの並列性ではなくて
クラスタとかのPCレベルの並列性を利用するライブラリだよ

581 :デフォルトの名無しさん:2008/09/24(水) 04:22:25
>>577
乙。
最近みつけたソフトですがZipファイルをマウント出来るソフトがあります。
これを使うと、解凍せずにboostライブラリをコンパイルできます。
最新版のRarをZipに再圧縮したところ126Mになりましたが
これだと展開する手間が無く便利です。

582 :デフォルトの名無しさん:2008/09/24(水) 04:24:10
リンクはここです。


Zipファイルをマウントする?「Pismo File Mount Audit Package」
http://www.moongift.jp/2008/07/pismo_file_mount_audit_package/

583 :デフォルトの名無しさん:2008/09/24(水) 12:16:12
クラスAが関数testを持ち
クラスAの参照を保持するクラスBがあり
クラスBの->演算子でクラスAのポインタを返す場合
B b;
b->test();
は可能なんですが
このクラスをshared_ptrに入れて
shared_ptr<B> c(b);としたらもちろんc->test()は通りません

それを通るようにしたいのですが、クラスA又はBに工夫をして何とか通るようにならないでしょうか
shared_ptrみたいなクラスを自作しないと無理ですかね
なんかboostと関係ない気がしてきた

584 :デフォルトの名無しさん:2008/09/24(水) 12:24:14
getでもダメ?

585 :デフォルトの名無しさん:2008/09/24(水) 12:25:38
>クラスAの参照を保持するクラスBがあり
>b->test();
クラスAの参照はどうやって保持してるの?意味が分からない。

586 :デフォルトの名無しさん:2008/09/24(水) 12:31:32
即レス感謝です

getでも結局帰ってくるのはBのポインタなので無理でした^^;
クラスBのコンストラクタでクラスAをnewしてメンバ変数で保持してます

587 :デフォルトの名無しさん:2008/09/24(水) 12:38:31
Bにtestという関数を追加すればいいんじゃない?
その実体はAのtestを呼ぶだけ

588 :デフォルトの名無しさん:2008/09/24(水) 12:41:19
>>587
最初はそれでやるつもりだったんですが、メッソドや実装したいクラスの数が多かったので
もっと効率のいいやり方がないかと悩んでいました

しかし、やっぱどうあがいても帰ってくるのはポインタなので無理そうですね^^;
shared_ptrをコピーして->演算子などが参照を返すようにするか
諦めて(*c)->test()と書くことになりそうです…

589 :デフォルトの名無しさん:2008/09/24(水) 16:19:44
iteraterでよく見る形だが…
それの何が気に入らないんだ?

590 :デフォルトの名無しさん:2008/09/24(水) 17:06:55
shared_ptr<B>にB*と同じ振る舞いを期待するならわかるが、
shared_ptr<B>にBと同じ振る舞いを期待するのは、そもそもおかしい気がする。

591 :デフォルトの名無しさん:2008/09/24(水) 20:01:54
素直に A *B::GetA() { return p_a; } で。

592 :デフォルトの名無しさん:2008/09/24(水) 23:47:50
>>588
諦めるも何も、shared_ptrはポインタと同等の振る舞いなんだから
例え B* c = new B(); と書いたって、(*c)->test()
何かアロー演算子をオーバーロードしたせいで、混同している気がする。

593 :デフォルトの名無しさん:2008/09/26(金) 16:25:21
配列の添え字にマイナスを与えたい
ublas::matrix[-5][-3]
とか
boostに、これができそうなのありますか?


594 :デフォルトの名無しさん:2008/09/26(金) 16:27:46
むしろC標準でも問題ない

595 :デフォルトの名無しさん:2008/09/26(金) 22:16:10
更新しました。
ttp://booster.x0.to/


596 :デフォルトの名無しさん:2008/09/27(土) 11:54:13
hoge1ならchoge1
hoge2ならchoge2
hoge3ならchoge3
...
それ以外ならchogen
って型を作るにはどうしたら良いでしょうか?
つまり次のようにしたいです
hoge<T>::type // T が hoge1 なら type が choge1,hoge2 なら hoge2, ... それ以外なら chogen

597 :デフォルトの名無しさん:2008/09/27(土) 13:35:08
typedef choge1 hoge1

598 :デフォルトの名無しさん:2008/09/27(土) 13:36:48
template<typename T> struct hoge{ typedef chogen type; };
template<> struct hoge<hoge1>{ typedef choge1 type; };
template<> struct hoge<hoge2>{ typedef choge2 type; };
...

599 :デフォルトの名無しさん:2008/09/27(土) 14:51:24
boost::mpl::atのドキュメントとヘッダが食い違ってる件
>>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***/> {};

600 :デフォルトの名無しさん:2008/09/27(土) 15:07:14
>>598をBoost.PPで生成すれば完璧

601 :デフォルトの名無しさん:2008/09/27(土) 16:13:10
>>599
なんで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;
};

602 :デフォルトの名無しさん:2008/09/27(土) 21:07:06
mpl使わずに普通に書いた方が短くて分かりやすいねw

603 :デフォルトの名無しさん:2008/09/27(土) 21:11:55
一方ロシアはpythonでコードジェネレートした

604 :デフォルトの名無しさん:2008/09/27(土) 21:46:05
hogeNまであるとしてNがどれぐらいまでに増えたらmplの方が文字数少なくなるんだろうか
でも、そこまで増えるとしたらアプローチが変わってくるんだろうけど
分かりやすさの点ではmplも特殊化も大して変わらんように思える

605 :デフォルトの名無しさん:2008/09/28(日) 11:31:11
hage1ならchage1
hage2ならchage2
hage3ならchage3
...
それ以外ならasuka
って型を作るならどうか?

606 :デフォルトの名無しさん:2008/09/28(日) 11:32:11
mplを使うべき場面じゃなかったってことかな?
特殊化で十分書けるし

607 :デフォルトの名無しさん:2008/09/28(日) 11:43:45
特殊化で十分というか、特殊化の方がコンパイラに優しいだろ。
コンパイル時間をはかった訳じゃないけど、mpl使うのがコンパイラに優しいとは思えないw

608 :デフォルトの名無しさん:2008/09/28(日) 12:50:33
VisualStudio2005にSP1を当てたらboost.randomでエラーが出るようになりました。
コンパイルを通す方法を教えてください。

609 :デフォルトの名無しさん:2008/09/28(日) 12:57:41
どんなエラー?
そのまま貼り付けて
出来ればソースも

610 :デフォルトの名無しさん:2008/09/28(日) 12:58:53
<memory>と<algorithm>ヘッダでエラーが頻出します。
100以上あるので貼り付ける事は出来ません。

611 :デフォルトの名無しさん:2008/09/28(日) 13:08:50
意味があるのは最初の一個だ。
テンプレートは何行もにも分かれてるからその1ブロックだ。


612 :デフォルトの名無しさん:2008/09/28(日) 13:10:26
C:\Program Files\Microsoft Visual Studio 8\VC\include\memory(82) : error C3646: 'uninitialized_copy' : 不明なオーバーライド指定子です

613 :デフォルトの名無しさん:2008/09/28(日) 13:12:09
そのエラーがでるソースここに書けない?
できればこのエラーがでる最小のソース

614 :デフォルトの名無しさん:2008/09/28(日) 13:13:08
#include <boost/random.hpp>
int main(){
return 0;
}

615 :デフォルトの名無しさん:2008/09/28(日) 13:24:44
再インストールしかないだろうjk・・・

616 :デフォルトの名無しさん:2008/09/28(日) 13:27:12
https://connect.microsoft.com/VisualStudio/feedback/Vote.aspx?FeedbackID=226163
>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.

617 :デフォルトの名無しさん:2008/09/28(日) 13:31:26
ありがとうございます。
動くようになりました。

618 :デフォルトの名無しさん:2008/10/01(水) 08:46:01
古いlinuxで1.36をbuuldしようとすると
ostreamがない
とかいうエラー出る

619 :デフォルトの名無しさん:2008/10/02(木) 20:48:36
1.36キターーーーーーーー
http://www.boostpro.com/products/free

620 :デフォルトの名無しさん:2008/10/02(木) 21:15:12
こっちの方が最新版だぞ。外人がビルドした方が信頼できそうと思ったが、今はこっちしか入れてない。

> 更新しました。
> ttp://booster.x0.to/

621 :デフォルトの名無しさん:2008/10/02(木) 22:20:14
boostぐらい自分でビルドしろよ。

622 :デフォルトの名無しさん:2008/10/02(木) 22:58:26
>>621
boostぐらい自分で作れよ。

623 :デフォルトの名無しさん:2008/10/02(木) 22:59:37
無理っす

624 :デフォルトの名無しさん:2008/10/03(金) 00:23:42
>>620
最新版とは言っても正式版じゃないのは嫌な人も多いだろう

625 :デフォルトの名無しさん:2008/10/03(金) 00:58:53
boostの正式版なんてないのでは? 複数の人が個別に更新してるんでしょ?
C++の標準規格になるまでは正式ではないのでは?


626 :デフォルトの名無しさん:2008/10/03(金) 03:15:40
いや、Boost全体としてリリースサイクルがあるだろ

627 :デフォルトの名無しさん:2008/10/03(金) 07:41:50
>>625
知りもしないことに口出すなよ

628 :デフォルトの名無しさん:2008/10/03(金) 11:52:41
知ってることにだけ口出してたら、2chは成立せんなw
「でしょ?」とか「では?」って書いてるんだから、事実の話ではなく、不確かな知識の
確認がしたいんだってのはわかるから、別に混乱も起きないし。
君が美化委員を気取る必要は無いよ。

629 :デフォルトの名無しさん:2008/10/03(金) 12:24:05
キモイ

630 :デフォルトの名無しさん:2008/10/03(金) 12:29:14
>>626-630 は不要だな

631 :デフォルトの名無しさん:2008/10/03(金) 12:50:10
>>629
要は自分を言い負かす奴は全員キモイんですよねw

632 :デフォルトの名無しさん:2008/10/03(金) 20:10:15
更新しました。
ttp://booster.x0.to/

私のビルドはビルド時点での最新のSVNを使った開発速報版ですので、安定版とは位置付けが異なります。
通常は安定版を、開発状況を確かめたい場合や最新のSVNにしか無い機能を使ってみたい場合は速報版をといった風に
使い分けるのが良いのではないかと思います。

633 :デフォルトの名無しさん:2008/10/04(土) 16:46:59
「Boost C++をチューンアップする最先端ライブラリ」が7日発売だそうな
ttp://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の応用の本は欲しかったけど、やや物足りなさを感じるな

634 :デフォルトの名無しさん:2008/10/04(土) 18:08:36
ところで開発現場で実際にBoost使ってるとこってあるの?大きい案件で
C++使いすら集まらないのにBoost使うやつなんて絶対集まらない気がするんだが

635 :デフォルトの名無しさん:2008/10/04(土) 18:34:26
>>634
食わず嫌いと同じ 
boostはプログラムの難易度を下げるために開発されてるんだよ
OSに依存しない統一したコードを短く書くためのもの

636 :デフォルトの名無しさん:2008/10/04(土) 18:44:11
作るのは至難だが使うのはそう難しくないという。
コンピュータがまさしくそれですな。

637 :デフォルトの名無しさん:2008/10/04(土) 18:48:04
STLはかなりやさしいし、boostはまだ人柱っぽいけど、ひとつひとつのライブラリを利用するのは
そんなに難しくない。 以前からあるwindowsプログラム、DirectXを使う方が断然困難とおもうんだが

638 :デフォルトの名無しさん:2008/10/04(土) 18:55:07
>以前からあるwindowsプログラム、DirectXを使う方が断然困難とおもうんだが
Boostには現在、GUIやグラフィック描画のライブラリがないので比較しようがないと思うんだが。

639 :デフォルトの名無しさん:2008/10/04(土) 19:00:52
ポリシーでboostやC++を使わないのは、かまわないが
いざ使う事になって、使えなせないのはヘボだって事だな。
比較は出来る。
0から初めて習得に掛かる時間を比べたらDirectXのほうが断然上(難易度高い)。

640 :デフォルトの名無しさん:2008/10/04(土) 19:09:02
習得時間で難易度を比較するのか?
じゃあスワヒリ語とC++の難易度の差も、習得時間というモノサシだけで、同様に比較できるわけか?

641 :デフォルトの名無しさん:2008/10/04(土) 19:15:34
どの位の期間で開発に参加出来るかは大事

642 :デフォルトの名無しさん:2008/10/04(土) 19:38:28
shared_ptrとかtupleとか今すぐ使えるものがたくさんあるし。
使用可能なヘッダを指定すればいいんじゃないか。

643 :デフォルトの名無しさん:2008/10/04(土) 19:44:11
MPLとプリプロセッサをお忘れなく。

644 :デフォルトの名無しさん:2008/10/04(土) 19:48:43
一方ロシアはPythonでメタプログラミングをした。

645 :デフォルトの名無しさん:2008/10/04(土) 20:04:50
そりゃロシア人ならPythonを使うだろ。
何しろevalがあるんだから。

646 :デフォルトの名無しさん:2008/10/04(土) 20:07:12
evalといえばboost::proto
なかなかカオスだぞアレは

647 :デフォルトの名無しさん:2008/10/04(土) 20:30:22
>>640
揚げ足もあんまり必死に取りに行くと、ただ本人がバカに見えるだけでジ・エンドだよ。
相手をバカに見せたくて必死な君としては、これ大問題じゃないの?

興奮のあまり、いつの間にか「だけで」とか新条件加えちゃってるし。

648 :デフォルトの名無しさん:2008/10/04(土) 20:37:49
>>647
しかし、現に>>639は「習得に掛かる時間」だけしか「比べ」てないぜ。

649 :デフォルトの名無しさん:2008/10/04(土) 20:47:47
>>648
>>638を受けた上で、「それでも比較できる項目はあるぞ」って言ってるんだろ。
それが唐突に「言語は習得時間というモノサシだけで比較できる」と言ってるかのように曲がってる。

650 :デフォルトの名無しさん:2008/10/04(土) 20:57:57
bjamは習得に時間がかかる上に重く、汎用性も無い
各種ビルドツールの悪い所を寄せあつめたかのような最強の糞makeツールだと思うんですが
何でboostではあれが標準なの?ユーザーであんなの使ってる人いるの?
rakeとかSConsで一瞬でできる事でもとても面倒な事せにゃならん

651 :デフォルトの名無しさん:2008/10/04(土) 21:05:35
MLでやれ

652 :デフォルトの名無しさん:2008/10/04(土) 21:10:52
片仮名でブーストって書くと急に格好悪く感じるんだが
自分で自分の感性の意味がわからん。

653 :デフォルトの名無しさん:2008/10/04(土) 21:51:55
きっとお前が快獣ブースカを知っているほどのオッサンだからだ。

654 :デフォルトの名無しさん:2008/10/04(土) 21:57:26
いや、すまん、その怪獣マジ知らない。
なんか、逆にあんたの年代だけ明らかにしちゃったみたいで申し訳ないが・・・。

655 :デフォルトの名無しさん:2008/10/04(土) 21:59:54
ブースカくらい知っとけバカやロー

656 :デフォルトの名無しさん:2008/10/04(土) 22:08:31
いや、気にするな。その頃俺はまだ生まれていない。

657 :デフォルトの名無しさん:2008/10/04(土) 23:40:07
じゃあ逆にBooskaC++Libraries作って格好いいイメージ持たせようぜ。

658 :デフォルトの名無しさん:2008/10/05(日) 00:18:56
ビルでも動かす怪力なのに

659 :デフォルトの名無しさん:2008/10/05(日) 00:48:17
>>658
ブースカブースカうるせー


660 :デフォルトの名無しさん:2008/10/05(日) 02:08:02
Буска C++ Libraries

661 :デフォルトの名無しさん:2008/10/05(日) 03:22:57
boostはportablityが低すぎるからな。
日立とかのコンパイラで全く通らないから
他のベンダ系企業でも多分使うのは無理だな。

662 :デフォルトの名無しさん:2008/10/05(日) 08:48:18
>>661
通らないヘッダを教えてくれ

663 :デフォルトの名無しさん:2008/10/05(日) 10:38:30
gccとVC++で動けばたいてい事足りそうだが
あとはSunのコンパイラとAIXとか?

664 :デフォルトの名無しさん:2008/10/05(日) 11:38:28
DMC++最高に格好いいっす

665 :デフォルトの名無しさん:2008/10/05(日) 12:39:55
>>661
全部がだめってことは無いだろ。互換性が厳しいのはmplとかlambdaとかぐらいじゃないのか?

実装依存な部分もあるようだが、そういう違いを平らにしてくれるメリットの方が大きいと思うよ。


666 :デフォルトの名無しさん:2008/10/05(日) 13:12:02
boost内でのmplの使用箇所がどんどん増えてるけどな

667 :デフォルトの名無しさん:2008/10/05(日) 13:45:08
mplは見かけ以上に互換性高いよ

668 :デフォルトの名無しさん:2008/10/05(日) 14:13:07
lambdaは微妙だとしてもだ、MPLの実装には環境依存のコードは何も必要ないだろ。
今の実装には、環境依存のworkaroundが大量にあるとしてもだ。

だからMPLが使えないコンパイラというのは、そもそもC++のコンパイラじゃないからどうでもいいよ。

669 :デフォルトの名無しさん:2008/10/05(日) 14:40:44
>Boost ライブラリはテンプレートのような現代的な C++ の機能と
>C++ 標準ライブラリに依っている。多くの現代的なコンパイラは
>それらの有名な機能をなかなか良くサポートしている。しかし C++
>標準の採択から数年を経た今となっても、いくつかのコンパイラは
>部分特別化のような、重要なマイナー機能をサポートしていない。

>Boost ライブラリの作者はしばしば機能の不足しているコンパイラ
>環境で作うまく動かそうとしてたくさんの努力を費やす。それにも
>かかわらず、いくつかのライブラリはいくかのコンパイラで全くコンパイル
>されないか、機能を減らされているかもしれない。たとえコンパイラの
>最新リリースが Boost ライブラリをサポートするとしても、古いバージョン
>のコンパイラは正しく動かないかもしれない。

boostではコンパイラの限界も試されますよと。どのコンパイラも仲良くといこうね
という世界ではない気がする。

670 :デフォルトの名無しさん:2008/10/05(日) 17:56:35
特にboostに限った事ではないが、C++のコンパイラ開発自体、敷居をうんと高くして市場の独占を図ろうとしていると言うことらしい、
そのために標準に準拠していると言う建前のコンパイラは少なからぬバグを抱える羽目になる、C++の宿命見たいなものなのかねぇ

671 :デフォルトの名無しさん:2008/10/05(日) 18:02:50
嘘乙

672 :デフォルトの名無しさん:2008/10/05(日) 18:25:22
>>671
さてm1とm2のプリミティブはどっち?
typedef int A;

class T {
A m1;
typedef double A;
A m2;

};

673 :デフォルトの名無しさん:2008/10/05(日) 18:26:07
×さてm1とm2のプリミティブはどっち?
○さてm1とm2のプリミティブはなに?

674 :デフォルトの名無しさん:2008/10/05(日) 18:40:34
日本語の使いかたおかしくね?
「m1とm2の型はなに?」なら分かるけど

675 :デフォルトの名無しさん:2008/10/05(日) 18:41:40
>>672-673
コンパイルエラーになるのが正解のはず。D&Eで取り上げられていたから印象に残っている。
まあ試してみたら、VC++ 9でコンパイル通っちゃったけど。
(g++ 4.3.1ではエラーになった)

676 :デフォルトの名無しさん:2008/10/05(日) 20:28:00
>>672
m1はint型でm2はdouble型なので、どっちもプリミティブ。


677 :デフォルトの名無しさん:2008/10/05(日) 20:41:33
>>676
m1もdoubleじゃね?class/structの中に限って、上下関係無視するはず。

678 :デフォルトの名無しさん:2008/10/05(日) 21:57:08
以下のソースのmainでコメントアウトしてある動作を期待してるのですがMyReleaseが呼ばれませんorz
bindの使い方がおかしいと思うのですが、どう直せばよいでしょうか? 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;
}

679 :デフォルトの名無しさん:2008/10/05(日) 22:15:10
Releaseはただの関数(へのポインタ)、たまたまhoge_->Releaseで得られるだけなんだから、
hoge.reset(hoge_, bind(hoge_->Release, hoge_));で。

680 :デフォルトの名無しさん:2008/10/05(日) 22:19:39
>>678
> bind(bind(&Hoge::Release, hoge_), _1)
この部分、全体で一引数関数を作ることを意図してるんだと思うけど、実際には
bind(&Hoge::Release, hoge_)
という関数(引数を捨ててhoge_.Releaseを返す関数)が作られて、それに対してbindしてる
boost::bindの代わりにboost::lambda::bindを使えば意図した動作になった

681 :デフォルトの名無しさん:2008/10/05(日) 22:27:09
ところで
bind(bind(&Hoge::Release, _1), _1)
じゃなくていいのだろうか

682 :678:2008/10/05(日) 22:32:03
boost::bind(hoge_->Release, hoge_)
boost::lambda::bind(boost::lambda::bind(&Hoge::Release, hoge_), boost::lambda::bind::_1)
両方で期待していた挙動を示すことを確認しました。
ありがとうございます。

683 :デフォルトの名無しさん:2008/10/08(水) 11:08:34
やべぇBoostすげぇってのは各ライブラリみて分かったんですが、
各ライブラリの使い方ではなくて、実例集みたいなの公開してるところってないですか?
プログラム本って文法書はたくさんあるのに、コードコンプリートみたいな本が少なくて
想像力、発想力がない奴には独学きついっす。

684 :デフォルトの名無しさん:2008/10/08(水) 12:39:12
実例は実例で、見ても何やってるか分かんなくてなw
使い方と生きたコードの中間になるようなサンプルが欲しいとは俺もよく思う

685 :デフォルトの名無しさん:2008/10/08(水) 12:39:59
実例集って何だ?
俺の言語感覚では、実例集ってのは、実際の使い方やサンプルコードの類だと思うんだが
使い方ではないとはこれいかに。
実装方法か?

686 :デフォルトの名無しさん:2008/10/08(水) 17:15:54
>>684
Asioのサンプルは比較的そういう感じに近いと思う。

687 :デフォルトの名無しさん:2008/10/08(水) 20:43:18
VBの技100とかそういう系のミニサンプル集のことじゃね?

688 :デフォルトの名無しさん:2008/10/08(水) 20:47:24
あーあの使えないシリーズね

689 :デフォルトの名無しさん:2008/10/08(水) 22:50:50
boost限定じゃないけど
http://www.oreilly.co.jp/books/4873113032/
とか?

690 :デフォルトの名無しさん:2008/10/09(木) 21:04:01
>>684
まだ斜め読みしかしてないけど
>>633
の本あたりを求めてそうな感じだな

この本、文字列をわざわざ日本語にしてるみたいだけど
やめてほしいな

typedef std::map<std::string, std::vector<int> > map_type;
map_type m;

m["奇妙?"].push_back(3);
m["きもい?"].push_back(4);

とか。翻訳者はLokiの人か

691 :デフォルトの名無しさん:2008/10/10(金) 22:07:33
更新しました。
ttp://booster.x0.to/

692 :デフォルトの名無しさん:2008/10/11(土) 01:11:05


693 :デフォルトの名無しさん:2008/10/11(土) 14:02:51
"きもい"が本に使われるほど標準語化しているのか。
俺としては言葉狩りしてでも廃絶すべき言葉の筆頭なのだが。

694 :デフォルトの名無しさん:2008/10/11(土) 15:39:09
言っておくけど恋空とかは本じゃなくてケツ拭く紙とか焼き芋の焚きつけだからな

695 :デフォルトの名無しさん:2008/10/12(日) 12:50:40
VisualStudio2005でtupleをlexical_castで文字列に変換して元に戻そうとしたのですが例外が出ます。
下のソースでストリームは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;
}


696 :デフォルトの名無しさん:2008/10/12(日) 15:29:42
http://svn.boost.org/trac/boost/ticket/1920
この問題だな

697 :695:2008/10/12(日) 17:21:25
>>696
ありがとうございます!!その通りでした。パッチを適用したら変換できるようになりました。
素晴らしい



698 :デフォルトの名無しさん:2008/10/13(月) 12:03:43
Lokiのスレがないのでこちらで質問させていただきます。

//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)は何のためにあるのでしょうか。

699 :698:2008/10/13(月) 12:14:38
[使用部分]
STATIC_CHECK(0, aho);

[VC2008EE]
error C2079: 'ERROR_aho' が 未定義の struct 'Loki::CompileTimeError<__formal>' で使用しています。
[bcc]
エラー E2450 未定義の構造体 'Loki::CompileTimeError<0>'(関数 main(int,char * *) )

700 :デフォルトの名無しさん:2008/10/13(月) 13:15:00
推測だけど、「変数が定義されたが使われていない」という無用な警告を抑止するためじゃないの?
voidへのキャストも警告がらみな気がする

701 :698:2008/10/13(月) 14:11:45
>>700
なるほど。気づきませんでした。VCで警告を最大にしたところ、確かにそのような警告が出ました。
でもvoidの方は出ないですね。

702 :デフォルトの名無しさん:2008/10/15(水) 00:53:49
boost::fusionについて教えて下さい

同じ型構成の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

703 :デフォルトの名無しさん:2008/10/15(水) 02:02:25
>>702
単に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;
    };
};

これで通ったよ

704 :702:2008/10/15(水) 03:22:59
寝る前に覗きに参りました
>703
今眠い上に酔ってて頭が回りません orz
コンパイルが通って動くところまでは確認しました
明日ちゃんと確認しておきます

ありがとうございました!

705 :デフォルトの名無しさん:2008/10/15(水) 09:20:03
時間的に酒を飲みながら>>702を書いたってことか?

706 :デフォルトの名無しさん:2008/10/17(金) 13:05:31
新しいboostを使いたい場合VisualStudioは2005のままにしたほうがいいのでしょうか?

707 :デフォルトの名無しさん:2008/10/17(金) 13:45:02
2008

708 :デフォルトの名無しさん:2008/10/17(金) 20:14:34
更新しました。
ttp://booster.x0.to/


709 :デフォルトの名無しさん:2008/10/17(金) 20:31:23
すみません。以前に書き込んだんですけど、ZIPで配布して貰えないですか?
ZIPだとマウントして使えるので、解凍しなくて使えてHDDが1G以上節約できるので。(解凍しても使えます。)
サイズが、70M → 125Mくらいになってしまうのですが。

710 :デフォルトの名無しさん:2008/10/17(金) 20:41:54
自分でやれよそれぐらいw

711 :デフォルトの名無しさん:2008/10/17(金) 20:48:15
ZIPのマウントなら、boost一見さんにも優しいですよ。落とせば直ぐに使えるので。パスの設定はいりますが。

712 :デフォルトの名無しさん:2008/10/17(金) 21:09:05
まず、WindowsにZIPのままマウントする機能が標準搭載されているわけではない(よな?)のだから、
一見さんにも優しくなるとは思えない。
RARはマイナーだからとかそういう理由ならまだ分かるけど。

713 :デフォルトの名無しさん:2008/10/17(金) 21:13:53
上の方でファイルが重複だとか騒いでる上げっ放しの奴と同一人物だから放置しとけ


714 :デフォルトの名無しさん:2008/10/17(金) 21:14:54
ZIPにくら自分ですればいいよね?

715 :デフォルトの名無しさん:2008/10/17(金) 21:18:25
最初はファイルが重複だファイルサイズをこれだけ減らせるとか言って中の人に手間かけさせて、
今度はファイルサイズが大きくなってもいいからzipにしろとかどんだけ自己中だよ

716 :デフォルトの名無しさん:2008/10/17(金) 21:21:08
普及とみんなの便利のための発言なんです

717 :デフォルトの名無しさん:2008/10/17(金) 21:36:00
なんという詭弁

718 :デフォルトの名無しさん:2008/10/17(金) 21:48:37
HDDやCPUがしょぼいと空き領域を圧迫し、展開時間も掛かるんです。
重複有りだとどちらも多くなります。ZIPのマウントならば、120Mしか掛からず、展開せず直ぐに使えない。
一見さんがやめたい場合もZIPを消すだけです。

719 :デフォルトの名無しさん:2008/10/17(金) 21:49:24
訂正
展開せず直ぐに使えない。 -> 展開せず直ぐに使えます。

720 :デフォルトの名無しさん:2008/10/17(金) 21:51:25
>>709
HDDが足りないのなら必要なものだけビルドすればいい。リンクエラーが出てからで十分。殆どはビルド不要。
boostのホームページのインストーラを使えば必要な機能だけ選択してインストールできる。


721 :デフォルトの名無しさん:2008/10/17(金) 21:54:01
ZIPマウントするソフトを入れる手間を過小評価しすぎだ。
下手しなくてもBoostの導入よりよっぽど敷居が高いぞ。

722 :デフォルトの名無しさん:2008/10/17(金) 21:55:53
インストールしたら、ZIPファイル上で、クイックマウントを選ぶだけですよ

723 :デフォルトの名無しさん:2008/10/17(金) 21:56:32
遅くなったりしません?

724 :デフォルトの名無しさん:2008/10/17(金) 22:08:46
しょぼいCPUでBoostを使うだと…
mplとかspiritとか使うとコンパイルが遅くて泣くぞ?

725 :デフォルトの名無しさん:2008/10/17(金) 22:10:33
現状RARで配布しているんだから、RARをマウントするソフトを作れば解決だね、もちろん709さんが。
それは冗談だが、そもそもbooster.x0.toのは最新を追っかけている時点で初心者・一見さん向きでない感じがする。

726 :デフォルトの名無しさん:2008/10/17(金) 22:10:47
709がrarをマウントするソフトを作ればいいじゃない

727 :デフォルトの名無しさん:2008/10/17(金) 22:12:09
被った・・・orz
>>725
結婚して下さい。

728 :デフォルトの名無しさん:2008/10/18(土) 00:20:36
そしたら自分が無料ホームページにZIPにしたやつうpするか
回線が50KB/s、登りが10KB/s以下なのでサーバーは無理だ

729 :デフォルトの名無しさん:2008/10/18(土) 00:47:04
Boostはテンプレートきちがいな作りのせいで無駄にコンパイルが長いな。
逐次コンパイル向けのディレクティブ設定とかないの?

730 :デフォルトの名無しさん:2008/10/18(土) 01:32:15
プリコンパイルドヘッダ

731 :デフォルトの名無しさん:2008/10/18(土) 10:13:22
プリコンパイルってまとめて全部出来ないですか

732 :デフォルトの名無しさん:2008/10/18(土) 10:15:07
全部欲しけりゃ全部includeすりゃいいじゃないか。

733 :デフォルトの名無しさん:2008/10/18(土) 10:18:36
いつでもプリコンパルしてあるようにincludeやlibなどに配置できませんか

734 :デフォルトの名無しさん:2008/10/18(土) 10:55:12
うぜえよ

735 :デフォルトの名無しさん:2008/10/18(土) 11:18:41
自分で試せよな。

736 :デフォルトの名無しさん:2008/10/18(土) 20:05:36
boostの新しい本が出てたので買ってみた。各機能について丁寧に説明されていていい本だね。


737 :デフォルトの名無しさん:2008/10/19(日) 23:31:49
ピアソンのやつか。高いんだよな…でも買ってしまいそう

738 :デフォルトの名無しさん:2008/10/22(水) 00:39:09
1.37がもうすぐリリースされるみたい

739 :デフォルトの名無しさん:2008/10/22(水) 00:59:03
asioではパイプを扱うのは無理ですか?

740 :デフォルトの名無しさん:2008/10/22(水) 01:23:50
1.36だとPOSIXファイルディスクプリタやWindowsハンドルを使えるからいけるんじゃないの?

741 :740:2008/10/22(水) 03:11:31
posix::stream_descriptorできました
これはUNIXドメインソケットしか使えないと思っていました
ありがとうございます

742 :デフォルトの名無しさん:2008/10/22(水) 10:03:12
>>736-737
あんまり範囲を広げずによく使うやつに絞って解説されてるのがいいね。
原書はちょっと古いらしいが、古びない内容だと思う。
すでにバリバリに使ってる人には物足りないだろうな。

743 :デフォルトの名無しさん:2008/10/23(木) 10:39:44
ublas::matrix m(10,11);

m[2][3];
ができなくなって
m(2,3);
に統一されたのはなんで?


744 :デフォルトの名無しさん:2008/10/23(木) 14:05:16
poolについて質問です。
mallocあるいはconstructから返されたポインタを、生のポインタで扱うのは危険じゃないかと気になりました。
(deleteしてはいけなかったり、poolオブジェクトが寿命がつきたらポインタにアクセスしてはいけなかったりと・・)
解決方法は、
1、安全性を重視して、ハンドルクラスを書いてハンドルで扱う
2、そもそも速度が欲しくてpoolを使っているのだから、注意深く生のポインタを扱う
他にありますでしょうか?

745 :デフォルトの名無しさん:2008/10/23(木) 17:49:12
poolって外部にさらして直接扱うようなもんじゃないと思うけど。
コンテナみたいに外部からは意識しなくてもいいようにすべきじゃね?

746 :デフォルトの名無しさん:2008/10/23(木) 18:23:00
>>745
うーん、生成したいオブジェクトのコンストラクトと、poolが切り離せないのが困ります。
vectorのpush_backは構築されたオブジェクトを引数で受け取って、コピーコンストラクタで内部にコピーしてますよね。
これだと効率が悪くてまずいです。

747 :デフォルトの名無しさん:2008/10/23(木) 19:26:26
>>746
今は無理だが、C++0xを待ちたまえ。
コンテナにemplaceが追加されるぞ。
Variable Templatesを使ってコンストラクタへの引数を受け取るpush_backなどだ。

748 :デフォルトの名無しさん:2008/10/23(木) 19:57:09
>>747
おーそれは便利ですね。

しかし、現状poolの使い方が設計的な意味で難しいですね。
どうラップすればよいのか・・。

749 :デフォルトの名無しさん:2008/10/23(木) 20:09:20
Variadicだった。
そもそも、poolに期待するのは、サイズ固定でmallocと同じような振る舞いだろ。

750 :デフォルトの名無しさん:2008/10/23(木) 21:08:01
>>743
実装量の割に合わないからじゃないの?
(2,3)とかってやるほうが早いし.
[2][3]を許す場合matrix_expressionから派生すべてのクラスで
proxyクラス作らなきゃだし.

751 :デフォルトの名無しさん:2008/10/24(金) 02:27:55
あと関数プログラミング系のライブラリとの相互運用性も operator() のほうがより高いかと

752 :デフォルトの名無しさん:2008/10/25(土) 01:55:44
更新しました。
ttp://booster.x0.to/

圧縮形式につきましては、要領削減の観点からrarを使用しておりますが
他の形式への変更要望が多数ある様でしたら変更を検討致します。

753 :デフォルトの名無しさん:2008/10/25(土) 06:38:23
容量削減が目的だったら、7zのほうが縮むかもしれないぞ。
本家も使っているし。

754 :デフォルトの名無しさん:2008/10/25(土) 09:24:53
縮んでも7zは時間掛かる RARはトータル(負荷・時間・圧縮率)で良い
5倍掛かって、10%程度だろ

755 :デフォルトの名無しさん:2008/10/25(土) 10:13:55
7zそんなに重いか?

756 :デフォルトの名無しさん:2008/10/25(土) 13:07:06
rarは圧縮は有料なのが問題位かな。
正規ライセンスのソフトで圧縮してるならいいが、
不正なライセンスとか未登録状態で圧縮してるなら、
解凍して利用する側まで不正なライセンス使用に汚染される。

757 :デフォルトの名無しさん:2008/10/25(土) 13:38:48
7-zipでデフォルト(64)がいいよ。 サイズが現状より70%増える(サイズ120M)けど
解凍せずに使えるので。 上でzipといってた人です。 一見さん、最新版に直ぐ入れ替えたい
人にもお勧めですよ。 zipのままコンパイルにつかえるので

758 :デフォルトの名無しさん:2008/10/25(土) 17:59:24
>>752
ボランティアでやっているんだ、あんたの好きにすればいいよ。
つーか、ここはあんたのアンケート会場じゃないんだから情報収集するなよ。
また>757みたいなのが沸いて鬱陶しいじゃないか。

759 :デフォルトの名無しさん:2008/10/25(土) 20:14:03
圧縮馬鹿しねよ。

760 :デフォルトの名無しさん:2008/10/26(日) 00:16:52
圧縮形式なんてどうでもいいよ
TARでもGCAでもACEでも好きなの使ってくれ

761 :デフォルトの名無しさん:2008/10/26(日) 01:23:54
ヘッダを覗いてみたのですが、
正しい解釈か自信がないので質問させてください。

boost::shared_array<A> arr(new A[100]);
A* a = &arr[99];
とした時、aにはarrの保持するA型配列99番目の要素へのポインタが格納される。
でOKでしょうか


762 :デフォルトの名無しさん:2008/10/26(日) 01:27:41
>>761
先頭要素を 0 番目と呼ぶならそのとおり。
boost 関係なくね?

763 :デフォルトの名無しさん:2008/10/26(日) 01:42:31
>762
回答ありがとうございます。
迷ったのですが、一応通常の配列アクセスではなく、
shared_array側でオーバーロードされた[]を利用しているので、
こちらで質問させていただきました。すみません

764 :デフォルトの名無しさん:2008/10/26(日) 04:49:22
Boost 1.33.0から1.36.0に変えてビルドしたらアプリがハングするようになったんだが、
mutexとかshared_ptrまわりでなんか変更あった?

765 :デフォルトの名無しさん:2008/10/26(日) 05:07:41
Boost.Threadは結構変更されたと思う
使ってないから詳しくは知らんが

766 :デフォルトの名無しさん:2008/10/26(日) 20:02:41
http://boost.cppll.jp/HEAD/libs/smart_ptr/shared_ptr.htm#FAQ
>> A. shared_ptr は unique() な時をのぞいて、所有権を譲渡できない。
>> なぜなら、いずれは所有権を共有している他の shared_ptr が、そのオブジェクトを削除するはずだからである。

ユニークな時は所有権を譲渡できるという事ですよね?
どうやって譲渡するんですか?

767 :デフォルトの名無しさん:2008/10/26(日) 20:15:26
所有権というのは架空のものですので、
それを実装するのはあなたです。swap()に書いたり。

C++0xではそれを実装する場所は、
move semanticsを記述するoperator=(T &&)のところになります。

768 :デフォルトの名無しさん:2008/10/26(日) 20:42:20
>>767
すみません、よくわからないです。

所有権とはdeleteする義務だと思っていました。
生のポインタを取り出すだけならget()でできますが、これをそのまま別の場所に保管していても、
shared_ptrのデストラクタでdeleteされてしまいますよね。
どうすれば一度shared_ptrに入れたポインタのdeleteの義務をshared_ptrから移すことができるんですか?

769 :デフォルトの名無しさん:2008/10/26(日) 20:55:58
> もし *this がポインタ p と削除子(deleter) d を 所有 していれば、d(p) を呼び出す。

だし、swapでポインタは書き換えられるし。

770 :デフォルトの名無しさん:2008/10/26(日) 20:57:31
>>768
そういう意味では、shared_ptrから所有権をもらうことはできない。
(基のQにあるように、そもそもreleaseが無い以上uniqueであっても手段がない)
だから、中身を移すことで似たようなことを再現することになる。
shared_ptr<T> sp(new T);
T x;
swap(x, *sp); //0xならx = std::move(*sp);

771 :デフォルトの名無しさん:2008/10/26(日) 21:41:23
>>769,770
boostのサイトの文を勘違いして読んでいました。
例えrelease関数が用意されていたとしても、uniqueでなければ所有権譲渡にならないという意味だったんですね。

772 :デフォルトの名無しさん:2008/10/27(月) 16:08:24
object_poolのテンプレート引数にクラスX渡し、construct関数を呼んだ時、
Xのoperator newが定義されていない場合(デフォのまま)でも、コンパイルエラーにならないのはどういう仕組みなんですか?

773 :デフォルトの名無しさん:2008/10/27(月) 16:53:58
Xのoperator newは関係がないから

774 :デフォルトの名無しさん:2008/10/27(月) 18:22:53
object_pool.hppの74行目
try { new (ret) element_type(); }
これはoperator newではないんですか?

775 :デフォルトの名無しさん:2008/10/27(月) 18:38:51
関係あるのはelement_typeのコンストラクタであってoperator newではない

776 :デフォルトの名無しさん:2008/10/27(月) 19:09:01
すみません初歩的なところを忘れていました。
<new>に
void* operator new(std::size_t, void*) throw();
が定義されていました。

thxでした。

777 :デフォルトの名無しさん:2008/10/27(月) 19:09:19
element_typeにoperator new(void*)か何かが定義されていれば
それが使われるだろうが、例えそれが無くても<new>にある
大域名前空間のoperator new(void*)が見つかるので問題ない。

778 :デフォルトの名無しさん:2008/10/27(月) 20:39:45
new (ret) element_type();
は配置new構文であってoperator newと直接の関係は無いからな

779 :698:2008/10/28(火) 20:11:15
>>701
(void)はlokiの別のソースで、get rid of warning と書いてありました。
スレ違い気味ですが、ご報告まで。

780 :デフォルトの名無しさん:2008/10/28(火) 20:21:00
lintみたいなスタイルチェッカーにかけると、printfの戻り値が使われていません的な警告が出る(出た)んだよ。
それがうざいから(void)printfと書いてある古いソースは結構ある。

781 :698:2008/10/28(火) 20:44:17
>>780
なるほど。ありがとうございます。でも ERROR_##msg は変数ですよね。

782 :デフォルトの名無しさん:2008/10/28(火) 21:04:26
宣言と式文
式文がないと使ってねーよのwarningが出る。

783 :デフォルトの名無しさん:2008/10/31(金) 18:05:07
更新しました。
ttp://booster.x0.to/

784 :デフォルトの名無しさん:2008/11/03(月) 10:16:50
1.37.0のβとれたみたい
最近バージョン上がるの無茶苦茶速いね

785 :デフォルトの名無しさん:2008/11/03(月) 19:43:31
>784
ttp://www.boost.org/development/index.html
のカレンダーを見るに、3ヶ月に1回リリースするつもりみたいよ?

786 :デフォルトの名無しさん:2008/11/03(月) 22:06:43
Boost 1.37.0 age

787 :デフォルトの名無しさん:2008/11/03(月) 22:51:29
% bjam
...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 ======

相変わらずこのテスト通らないんだな…

788 :デフォルトの名無しさん:2008/11/04(火) 19:30:56
>>784
ネタ切れになるとやたらとバージョンを上げるようになるw

789 :デフォルトの名無しさん:2008/11/04(火) 21:11:54
GUIライブラリまだー?

790 :デフォルトの名無しさん:2008/11/04(火) 21:27:44
いやいやまずはXML DOMでしょう。

791 :デフォルトの名無しさん:2008/11/04(火) 22:13:47
WXWidgetsの事、たまには(ry

792 :デフォルトの名無しさん:2008/11/04(火) 23:08:27
wxWidgetsはまあ使えるけど、あそこからModern C++的に納得の行く出来にするのは
無理っぽい気が

793 :デフォルトの名無しさん:2008/11/04(火) 23:26:09
あれはなんかMFCぽくてイヤw

794 :デフォルトの名無しさん:2008/11/04(火) 23:41:45
Qtの方がまだいいよ。
mocの部分のtemplate化が出来たら問題なし。

795 :デフォルトの名無しさん:2008/11/05(水) 01:18:59
jsonはやりとりできるの?

796 :デフォルトの名無しさん:2008/11/07(金) 20:30:23
更新しました。
ttp://booster.x0.to/

SVNは1.38に移行しました。

797 :デフォルトの名無しさん:2008/11/08(土) 09:18:18
>>796
乙乙です

798 :デフォルトの名無しさん:2008/11/11(火) 08:19:46
クアッドコアのマシンを用意して
ovenとかspiritを使ったコードでもflymakeを使って楽したい


799 :デフォルトの名無しさん:2008/11/11(火) 08:47:08
1.37の新機能のレビューをお願いします

800 :デフォルトの名無しさん:2008/11/11(火) 11:01:20
英語くらい読めよ

801 :デフォルトの名無しさん:2008/11/13(木) 17:49:22
VC9.0SP1を使ってるんだけどもしかしてBOOST_TYPEOF使えなくなった?

802 :デフォルトの名無しさん:2008/11/14(金) 00:22:42
VC++にはいつ標準装備になるんだ?

803 :デフォルトの名無しさん: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  バ  ン
  ヽ    -一''''''"~~``'ー--、/:::::イ;  -一'''''''ー-、    ン
   ヽ ____(⌒)(⌒)⌒) ):::/}  (⌒_(⌒)⌒)⌒))

804 :デフォルトの名無しさん:2008/11/14(金) 08:48:30
VC8,7.1でのnative typeofはバグを利用して無理矢理実装したものだから
本来native typeofは使えないものなんだよ

805 :デフォルトの名無しさん:2008/11/15(土) 00:45:53
更新しました。
ttp://booster.x0.to/

806 :デフォルトの名無しさん:2008/11/15(土) 00:53:20
おつ

807 :デフォルトの名無しさん:2008/11/18(火) 12:56:22
boost::exceptionについて質問なのですが、キャッチした情報にさらに上乗せして再スロー
出来ると思っていたのですが、同じタグで情報を流しこむと上書きされてしまうようです。

class MyException : public boost::exception{}

try
{
MyException
}
catch()
{


これでは上手く上乗せできないように思えるのですが、

また、let's boostを見ていたら
「スレッドを超えて例外を飛ばす場合のデータの所有権管理などもうまいことやってくれる模様」
とあったのですが、これはどういうことなのでしょうか?

また、同じタグの情報を複数残せませんが、キャッチしたexceptionクラスにそこで

808 :デフォルトの名無しさん:2008/11/18(火) 13:06:28
すみません思いっきり入力途中でした。。。

boost::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);
}


809 :デフォルトの名無しさん: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を見ていたら
「スレッドを超えて例外を飛ばす場合のデータの所有権管理などもうまいことやってくれる模様」
とあったのですが、これはどういうことなのでしょうか?


長文すみませんでした。

810 :デフォルトの名無しさん: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は使ったことがないので他の人の解説希望。

811 :808:2008/11/18(火) 16:44:57
解凍ありがとうございます。
C#のように、キャッチした例外を包含して再スローできるのかと思ってたのですが違うんですね。
1.37をインストールして、教えてもらった方法で試してみます。

812 :デフォルトの名無しさん:2008/11/18(火) 16:50:05
>>811
お前の考えているC#のってどんなのだ?

813 :デフォルトの名無しさん:2008/11/19(水) 09:21:29
catch( Exception e )
{
  throw new System.Exception( "エラー", e );
}
みたいな。↑みたいなメッセージではあまり意味がないですが^^;
最上位で包含してる例外オブジェクトを拾ったり、まとめてエラーログの出力などができて便利です

814 :デフォルトの名無しさん:2008/11/19(水) 09:42:26
ならコンテナで情報を持つようにして、キャッチー>再スローの時にコピーして新しいメッセージをpushする
とかそういうのでいいんじゃないかねぇ

815 :デフォルトの名無しさん:2008/11/19(水) 10:15:19
そういうのを自作しようかと思います。
boostと関係なくなってしまいましたがありがとうございました。

816 :デフォルトの名無しさん:2008/11/19(水) 10:41:02
>>809
> 「スレッドを超えて例外を飛ばす場合

例外オブジェクトのスレッドを越えた持ち運び時の
スタックアロケーションなハンドルとの関係など。

817 :デフォルトの名無しさん:2008/11/19(水) 11:01:32
>>813
error_info として source_exception とか作ればいいんじゃないか?
それをライブラリで用意しといて欲しいとは思うけどね。

818 :デフォルトの名無しさん:2008/11/21(金) 19:43:15
更新しました。
ttp://booster.x0.to/

819 :デフォルトの名無しさん:2008/11/21(金) 21:40:22


820 :デフォルトの名無しさん:2008/11/23(日) 15:22:09
boost::mpl::vector_cの中に格納されている値の最大値を得る方法が分かりません。
boost::mpl::max_element<boost::mpl::transform_view<boost::mpl::vector_c<int, 0, 1, 2, 1, 0>, boost::mpl::_1::value> >::type::value
でうまくいきません。

821 :デフォルトの名無しさん:2008/11/23(日) 15:35:41
自己解決しました。
どうやらboost::mpl::_1とした上でboost::mpl::derefを使えば良いようです。
ありがとうございました。

822 :デフォルトの名無しさん:2008/11/25(火) 18:48:23
どうでもいいけど横なげえ

823 :デフォルトの名無しさん:2008/11/29(土) 02:00:48
更新しました。
ttp://booster.x0.to/

824 :デフォルトの名無しさん:2008/12/06(土) 07:20:31
更新しました。
ttp://booster.x0.to/

825 :デフォルトの名無しさん:2008/12/06(土) 07:55:23
>>823-824
乙乙 (ダブルオツー)

826 :デフォルトの名無しさん:2008/12/09(火) 23:28:24
「俺がboostだ!」

827 :デフォルトの名無しさん:2008/12/09(火) 23:30:35
俺が…俺たちがboostだ!

俺progress_displayな

828 :デフォルトの名無しさん:2008/12/09(火) 23:37:05
じゃあ俺program_optionsで

829 :デフォルトの名無しさん:2008/12/09(火) 23:44:03
じゃあmplで・・・

830 :デフォルトの名無しさん:2008/12/10(水) 01:59:45
configは俺一人で十分だ…(ズキューン)

831 :デフォルトの名無しさん:2008/12/10(水) 10:16:01
type_of「狙い打つぜ」

832 :デフォルトの名無しさん:2008/12/10(水) 10:44:08
progress_display「万死に値する」

833 :デフォルトの名無しさん:2008/12/10(水) 11:00:04
じゃあ俺は意味不明なエラーメッセージ吐くよ

834 :デフォルトの名無しさん:2008/12/11(木) 01:04:20
xpressive「楽しいよなぁ、regex!regexーーーー!」

835 :デフォルトの名無しさん:2008/12/11(木) 02:57:53
regex「.objのサイズを測ってみろよ・・・
xpressive、テメェーの.objは一体何MBだァーー?言ってみやがれッ!」

836 :デフォルトの名無しさん:2008/12/11(木) 10:44:52
mpl「私色に染めてもらおう」

837 :デフォルトの名無しさん:2008/12/11(木) 14:19:34
すみません質問です

boost::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)' から減少できませんでした

と言うエラーが表示されてしまい困っています。
メンバ関数でないか、引数が一つであれば正常に動作するのですが、何がいけないのでしょうか
宜しくお願いします。

838 :デフォルトの名無しさん:2008/12/11(木) 15:34:35
>>837
std::mem_funは、引数無しか引数が一つのメンバ関数しか受け付けないから。
boost::mem_fn使え。
あと、その場合だとbind1stもダメだからboost::bindを使う。

839 :デフォルトの名無しさん:2008/12/11(木) 16:48:01
そして、boost::bindを使うなら、boost::mem_fnは不要となるのであった。

840 :デフォルトの名無しさん:2008/12/11(木) 16:55:48
こうか
boost::function<LRESULT(UINT, UINT)> func = boost::bind(&App::f, this, _1, _2);

つくづくfunctionとbindの組み合わせはすばらしいな
autoが入ればいらなくなるboost::functionも多そうだけど

841 :デフォルトの名無しさん:2008/12/11(木) 20:09:19
std::string みたいに、デフォルト引数あり+オーバーロードしまくりな場合に
bind はむきー!となって死ねるので、個人的には lambda 式に期待している

842 :デフォルトの名無しさん:2008/12/11(木) 20:37:28
なぜboost::pool_allocatorはテンプレート引数が3つなのですか?
おかげでtemplate-templateパラメータでデフォルトのアロケータとの混在ができません。

843 :デフォルトの名無しさん:2008/12/11(木) 21:09:15
ならラップすれば良いだけの話。

844 :デフォルトの名無しさん:2008/12/11(木) 22:56:34
rebindじゃだめなの?

845 :デフォルトの名無しさん:2008/12/12(金) 10:17:07
rebindするのに3つ引数が必要だろうが。しかもrebindされた結果も3つの引数取るし。
ここは別のクラスを作ってラップするのがベター。

846 :837:2008/12/12(金) 16:17:16
>>838-840
返信遅れてすみません。bindでうまくいきました!
しかしなんて言うか・・・すごいなBoost
すごいを通り越してキモイww

847 :デフォルトの名無しさん:2008/12/12(金) 16:58:56
bindはboost::bindと、boost::lambda::bindの2つがあるけど
ラムダ版のほうでとっとと統一してほしいところ
あと、phoenixとlambdaの統合も早いトコよろしく

848 :デフォルトの名無しさん:2008/12/12(金) 22:44:17
統合しなくていいからphoenix::delete_をよこせ。話はそれからだ。

849 :デフォルトの名無しさん:2008/12/13(土) 07:14:32
更新しました。
ttp://booster.x0.to/

850 :デフォルトの名無しさん:2008/12/13(土) 09:49:10
関係ないが、boost::asioがdetail以下に独自のthread / mutexを持ってたりして気になった。
boost::threadはビルドしないと使えないのを嫌ったのかな…。

851 :デフォルトの名無しさん:2008/12/13(土) 16:50:57
poolも独自のmutex持ってるね。
gcd/lcmになるともう(ry

852 :デフォルトの名無しさん:2008/12/13(土) 23:47:35
Asioはどうせビルドしないと使えないBoost.System使っているんだから、
Threadの使ったって俺は気にしないのに。

853 :デフォルトの名無しさん:2008/12/16(火) 23:19:17
いつの間にやらBOOST_FOREACHでインテリセンスが
御臨終するようになったので、代案を考えてみた。

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++)

854 :デフォルトの名無しさん:2008/12/16(火) 23:30:41
使用例

typedef 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; //一行表記も可


855 :デフォルトの名無しさん:2008/12/17(水) 02:04:13
1. そのGetBegin/GetEndはboost::begin/endだと駄目なのか?

2. VC++なら、参照型を使わない限り大抵#define BOOST_FOREACH(e, c) for each (e in (c))で良いはずだが?
参照型を使いたいんだという異論は認める。

856 :デフォルトの名無しさん:2008/12/17(水) 10:26:16
boost::spiritでURIを解析したいと思い、下のように書きました

HostName = *(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.

となってしまいます。
どう書き換えればうまくマッチングを行えますか?

857 :デフォルトの名無しさん:2008/12/17(水) 10:34:24
/やeofのチェックを追加するとか

858 :デフォルトの名無しさん:2008/12/17(水) 10:37:33
>>855
A1:どうせ短いコードだし、boost無しでやりたかったので
A2:VCにfor eachが追加されてたのを知らなかったorz


859 :デフォルトの名無しさん:2008/12/17(水) 12:25:36
for eachだと読み取りのみなのか。

>参照型を使いたいんだという異論は認める。

ってのは、そこのことか。

860 :デフォルトの名無しさん:2008/12/17(水) 19:11:36
>>857
ありがとうございます。
>>856はURIパーサの一部で、/までチェックしてしまうと
パスのチェックがうまく働かなくなってしまいますので、できません。

861 :デフォルトの名無しさん:2008/12/17(水) 20:41:09
>>856
HostName = *(DomainLabel >> ch_p('.')) >> !DomainLabel;
DomainLabel = alnum_p >> *((*ch_p('-') >> alnum_p) | alnum_p);



862 :デフォルトの名無しさん:2008/12/17(水) 20:44:46
>>856
HostName = *(DomainLabel >> ch_p('.') >> eps_p(anychar_p)) >> TOPLABELp >> !ch_p('.');
としたらどうだろう?
ピリオドの後に1文字も無ければDomainLabelのほうでマッチしないようにしたつもりなんだけど。

863 :デフォルトの名無しさん:2008/12/17(水) 21:40:00
>>861-862
ありがとうございます。
入力は、もちろん

http://www.google.com.:80/

のようなテキストです。
ですので、入力切れを終端と判断出来ません。

また、DomainLabelはTopLabelをすべて含んでいます。

864 :856,863:2008/12/17(水) 22:06:21
たびたび済みません。
>>862でのeps_pがヒントとなり解決出来ました。

HostName = DomainLoop >> TopLabel >> !ch_p('.');
DomainLoop = *(DomainLabel >> ch_p('.') >> eps_p(DomainLabel));

としたところ、うまくいきました。


865 :デフォルトの名無しさん:2008/12/19(金) 21:43:57
更新しました。
ttp://booster.x0.to/

866 :デフォルトの名無しさん:2008/12/19(金) 23:05:29
pool は固定サイズのオブジェクトの割り当てですが、
可変サイズのオブジェクトの割り当てを行うものはないでしょうか?

apache portable library の pool に相当するような感じで

解放のタイミングが明確 (割り当てたオブジェクトがいっせいに必要なくなる)
ような処理におけるメモリ割り当てを高速化したいのですが

867 :デフォルトの名無しさん:2008/12/20(土) 07:37:51
自分でアロケータ作っちゃえば?

868 :デフォルトの名無しさん:2008/12/20(土) 12:49:23
関数から new したポインタを返すとき、その呼び出し元が
shared_ptr に入れて使うか scoped_ptr に入れて使うかわからないとき、
どうしたらいいかな?

生で new/delete すると例外安全にするのが面倒だし、
auto_ptr で返すと shared_ptr には渡せても scoped_ptr に渡せないんだよね。

なんで auto_ptr を scoped_ptr に変換できないの?
渡す方法ある?

869 :デフォルトの名無しさん:2008/12/20(土) 12:51:21
ごめんできるね。ドキュメントの最初のページだけ見て見逃してた



870 :デフォルトの名無しさん: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)

871 :デフォルトの名無しさん:2008/12/20(土) 16:11:38
>>870
プログラミングのど素人かどうかは、エラーに対処できるかどうかで
だいたい判ってしまうな。

ライブラリ探索パスに、'libboost_thread-vc80-mt-gd-1_34_1.lib'が存在
するパスが登録されていなくて、リンカがライブラリを見つけられないか、
そもそも'libboost_thread-vc80-mt-gd-1_34_1.lib'ファイル自体が存在
していないから、そういうエラーメッセージが出る。




872 :デフォルトの名無しさん:2008/12/20(土) 16:19:23
>>871
この糞質問だらけの板でまともに自分の状況を記述して質問をできることに俺は素直に感心したがな

>>870
>boost thread以外(boost/randomとかboost/mathとか)は普通に使えてるし、なんでだろう? 
randomとかmathはヘッダで完結していて.libを必要としないライブラリだからね。

原因は多分>>871の通り。
Tools -> Options -> Projects and Solutions -> VC++ Directories -> Library Files
に、libboost-なんちゃらのあるディレクトリを指定する。
今手元に英語版しかないので日本語版でどんな名前になってるかはわからん。

873 :デフォルトの名無しさん:2008/12/20(土) 16:20:52
ん、失礼。  早とちりかも。
>ちなみにスタティックライブラリの方はコンパイルできてるから
ここよくわからん。 もう少し詳しく解説希望。
特にBoost.threadをスタティックリンクするのかVCランタイムをスタティックリンクするのかの区別を。。。

874 :870: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

875 :デフォルトの名無しさん:2008/12/20(土) 16:46:08
インクルードしてるboostが1.34でオートリンクが古いライブラリ名になってる。
ライブラリパスだけ更新してインクルードパスが古いままとかじゃない?

876 :デフォルトの名無しさん:2008/12/20(土) 16:52:38
>>874
リンカに直接libboost-(略)を指定してるわけじゃないんだよね?
今のboost::threadって、インクルードすると勝手に#pragmaでリンクする仕様だったっけ?

877 :デフォルトの名無しさん:2008/12/20(土) 17:15:39
>>875
そもそも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> を指定しただけの状態)



878 :デフォルトの名無しさん:2008/12/20(土) 17:29:20
boost付けてスピードアップだ

879 :デフォルトの名無しさん:2008/12/20(土) 17:31:42
bjamとかでビルドしたら深い階層にライブラリ作られたりする(1.37.0では)
パスディレクトリの直下に.libファイルないといけないんじゃないの?

880 :デフォルトの名無しさん:2008/12/20(土) 17:48:02
>>879
今はそういう問題じゃないたぶん

>>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; }

881 :871:2008/12/20(土) 19:37:14
boost 1.36をWebインストールした際、VC++6.0用のライブラリがビルド
されていなかったんで、同梱のmakeファイルでビルドしたら、バージョン
は忘れたが、古いlibが生成されて似たようなエラーが出た記憶がある。

調べたら、makeファイル内部に記述されたバージョンが古いままだった
ので、テキストエディタで置換して再ビルドし直した。

この手のオープン系でいつも思うんだが、バージョンアップでデグレード
もしょっちゅうだし、何をどこまでテストしてリリースしているのか知らん
けど、たぶん他のVC++用もおそらく同じような状況なんじゃないの?

#pragmaのライブラリ指定はboost側のインクルードファイル内に記述が
あるんだと思われ。最近のDirectXなんかもそんな感じ(ソース内やリンカ
への直接指定が不要)になっているようだ。

882 :870:2008/12/21(日) 01:17:51
レスありがと

>>880
なるほど。
試して報告する
(週明けになっちゃうかも)

>>881
プロジェクトごとにいちいちlibファイル指定する手間は省けるけど、
肝心のマクロの出来がアレだと、逆にトラブルの元…ってことなのかな
(こっちの開発環境のせいって可能性も十分あり得るから、何とも言えないけど)

883 :870:2008/12/21(日) 12:34:55
>>880 >>881
#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しちゃってるみたい。

884 :870: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じゃなくて、こちらの環境でした。
レスくれた方々ありがとう。お騒がせしました。

885 :デフォルトの名無しさん:2008/12/23(火) 01:15:46
cygwinをフルインストールしててそっちのboostが引っかかってるのかと思ったが違ったみたいだな

886 :デフォルトの名無しさん:2008/12/23(火) 04:33:54
struct Hoge { virtual ~Hoge() = 0; };
struct 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());

887 :デフォルトの名無しさん:2008/12/23(火) 06:02:06
svn co http://svn.boost.org/svn/boost/trunk/ boostってやったら

A boost/libs/regex/test/regress/test_overloads.cpp
って行から先に進まない\(^o^)/

888 :デフォルトの名無しさん:2008/12/23(火) 11:27:54
SVNが遅いって過去スレに似たような現象なかったっけ

889 :デフォルトの名無しさん:2008/12/23(火) 12:48:40
ぶっちゃけsvnはどうあがいても遅い上に負担がかかるので、
>>865の人みたいに定期的にzipで上げてもらったものを落とすのがむこうもこっちも一番いい。

890 :デフォルトの名無しさん:2008/12/23(火) 13:17:19
gitとbzrによるcloneもあります。
分散型が好きな人ならどうぞ。
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
でとれるはず。

891 :デフォルトの名無しさん:2008/12/24(水) 06:58:42
>>886
std::bynary_function<const C&, const C&, bool>
ではだめなの?

892 :887:2008/12/24(水) 20:43:25
>>888-890
原因判明。
>df

/dev/  (中略) 100%

(以下略)
\(^o^)/

vmware playerの容量の増やし方わかんないしー
proto使いたかっただけなんだけど、protoだけダウンロードしてきてboost以下に置いてもなんかいろいろ足りないみたいで、
じゃあ全部入れるかと思ったんだけど、むぅ。

893 :デフォルトの名無しさん:2008/12/25(木) 12:42:39
>>892
ヒント: devfs

894 :デフォルトの名無しさん:2008/12/25(木) 19:06:40
signalのoperator()を繰り返し呼び出している途中で、関数オブジェクトを新たにconnectしたりdisconnectする使い方を思いついたんですけど、
こういう使い方って、signalの本来の目的とはズレてますか?

895 :デフォルトの名無しさん:2008/12/27(土) 01:50:15
shared_ptr には deleter を登録できるのに、scoped_ptr にはできない。
なぜ?何か理由がある?

896 :デフォルトの名無しさん:2008/12/27(土) 02:09:41
deleterを使うには余計なポインタとnewとtryが必要になるからじゃないか

897 :デフォルトの名無しさん:2008/12/27(土) 02:13:51
scoped_ptrで十分なシチュエーションでも、deleter を使いたかったら shared_ptrに
しろってことかな

898 :デフォルトの名無しさん:2008/12/27(土) 14:46:00
更新しました。
ttp://booster.x0.to/

899 :デフォルトの名無しさん:2008/12/27(土) 15:37:06
C++0xのunique_ptrはdeleterを指定できるみたい。

900 :デフォルトの名無しさん:2008/12/27(土) 16:57:21
>>899
あれはテンプレート引数にデリータの型を入れる方法になってるね。
default_delete の場合は特殊化してポインタだけで済ませるんだろう。

901 :デフォルトの名無しさん: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の引数と戻り値はこのままでうまいことやる方法はありませんか?


902 :デフォルトの名無しさん:2008/12/30(火) 18:08:52

※の時点ではまだx1,x2,x3のshared_ptrは生きているのでは…?

903 :デフォルトの名無しさん:2008/12/30(火) 18:09:04
最適化はoffになってるよね?

904 :901:2008/12/30(火) 18:12:12
>>902
日本語変でした
※の文が終わるときにx1のデストラクタが呼ばれます
なのでその次の
x1->Add( x3 ) ;
を呼ぶときにx1が正しくないため落ちます

>>903
すいません今すぐは確認できません

905 :デフォルトの名無しさん:2008/12/30(火) 18:14:42
落ちねえよ
なんてコンパイラ使ってるんだ?

906 :デフォルトの名無しさん:2008/12/30(火) 18:21:40
落ちたの?最適化onでステップ実行やらブレークがかからないまま正常に実行が終了したんじゃないかと。

907 :901:2008/12/30(火) 18:23:57
>>905
VS2005です
デストラクタが呼ばれることは確認しました

>>906
落ちましたね
ステップ実行もしました

908 :デフォルトの名無しさん:2008/12/30(火) 18:28:45
落ちねーよw
お前の方で見直さない限り俺たちには何も言えないから。

909 :デフォルトの名無しさん:2008/12/30(火) 18:34:01
shared_ptrはgetやresetを誤用しなければそうそうおかしな事にはならないはずだけどなあ

910 :デフォルトの名無しさん:2008/12/30(火) 18:34:09
問題が再現する最小限のコードを晒してもらわないと何とも言えないな

911 :901:2008/12/30(火) 18:42:34
Debugビルドだとさっきから言ってるところで落ちて
Releaseビルドだと落ちないけど期待された値になりません(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

912 :デフォルトの名無しさん:2008/12/30(火) 18:48:52
>>911
おそらくreturn sp_X( this ) ;がいけない。
こういうことがやりたければ、enable_shared_from_this使え。

913 :デフォルトの名無しさん:2008/12/30(火) 18:53:54
sp_X( this )

これがダメ
shared_ptrのコンストラクタには基本的に new した直後のポインタか、
既に正しく生成されたshared_ptrのインスタンスしか渡しちゃダメ

二重deleteで何が起こってもおかしくない

914 :901:2008/12/30(火) 18:54:37
>>912
できました!
そこが怪しいとは思いましたが…そんなのがあるんですね。
勉強になりました。

他の方々もどうもありがとうございました。


915 :デフォルトの名無しさん:2008/12/30(火) 18:55:50
>>913
基本的にはそうしていましたが、thisを戻したいときどうすれば、と悩んでいました。
とにかくありがとうございます。

916 :デフォルトの名無しさん:2008/12/30(火) 19:22:52
>>915
thisがほしいときは以下を参照してね。
http://boost.cppll.jp/HEAD/libs/smart_ptr/sp_techniques.html


917 :デフォルトの名無しさん:2009/01/02(金) 00:47:11
ptr_vector などの ptr_ 系のコンテナって、
メモリの再確保やノード生成時にメモリが足りなくて例外投げた際に
入れようとしたオブジェクトのメモリはリークするのですかしないのですか。

例えば、

boost::ptr_vector<int> v;
v.push_back(new int(2));

としたとき、new int が成功したけど
push_back する際のメモリ確保に失敗した場合に、
new int のメモリはリークする?

918 :デフォルトの名無しさん:2009/01/02(金) 01:24:58
>>917
ソース見れば分かるが、しない。

919 :デフォルトの名無しさん:2009/01/02(金) 01:28:13
ptr_container のソースってマクロで読みにくいし・・・

920 :デフォルトの名無しさん:2009/01/02(金) 01:32:26
しないと思うけど、ソース見れば

921 :デフォルトの名無しさん:2009/01/02(金) 01:33:10
わざわざ auto_ptr 渡すバージョンを作ったくらいだから
リークすんじゃね?

922 :デフォルトの名無しさん:2009/01/02(金) 01:33:20
ptr_containerのアロケートのところに例外しこんで
実験すればいいじゃん

923 :デフォルトの名無しさん:2009/01/02(金) 01:38:26
お前頭いいな。

924 :デフォルトの名無しさん:2009/01/02(金) 01:49:37
>>921
auto_ptrは便宜上だろ。別にリークするからじゃない

925 :デフォルトの名無しさん:2009/01/02(金) 03:46:51
ソース読まなくてもドキュメント読めば書いてあるのでは?

926 :デフォルトの名無しさん:2009/01/03(土) 00:22:38
更新しました。
ttp://booster.x0.to/
今回から、最新のドキュメント等を含むlibsフォルダも同梱する様に致しました。

927 :デフォルトの名無しさん:2009/01/03(土) 04:59:36
lispのgensymに相当するものってないのでしょうか?


928 :デフォルトの名無しさん:2009/01/03(土) 05:29:19
926乙

929 :デフォルトの名無しさん:2009/01/03(土) 05:34:59


930 :デフォルトの名無しさん:2009/01/03(土) 05:46:01
ありがとう

931 :デフォルトの名無しさん:2009/01/03(土) 05:49:46
乙age

932 :デフォルトの名無しさん:2009/01/04(日) 17:03:45
MFCのクラスにある関数を
thread SS(&StartShread);
として渡したんですが、
error C2276: '&' : 仮想関数のアドレスを取ろうとしました。
とエラーが出てしまいます。Threadにはどういう形で渡せばいいんでしょうか?
ちょっとMFCの質問気味かもしれませんがお願いします。

933 :デフォルトの名無しさん:2009/01/04(日) 17:15:40
普通だったらhoge.StartShread()と呼ぶんだから、hogeの部分も渡さないとだめよ。
thread SS(boost::bind(&クラス名::StartShread, boost::ref(hoge)));

refを付けているのは、直接hogeを渡すとそのコピーが作られてそっちのStartShreadが呼ばれるため。
代わりに、hogeが自動変数ならスレッドが終わる前にhogeが死ぬことのないように気を付けろ。

934 :デフォルトの名無しさん:2009/01/04(日) 17:15:57
thread SS(boost::bind(&クラス::StartShread, インスタンス, 〜));

935 :デフォルトの名無しさん:2009/01/04(日) 17:45:10
ありがとうございます。コンパイルできました!


936 :デフォルトの名無しさん:2009/01/05(月) 08:52:27
最近実測して気がついたんだけど、bindした関数の呼び出しって
生関数ポインタの呼び出しに比べて4〜5倍遅くなるのね。

937 :デフォルトの名無しさん:2009/01/05(月) 11:18:10
当たり前やがな
むしろ4〜5倍で済むんだ?という感じ。

938 :デフォルトの名無しさん:2009/01/05(月) 11:53:43
大体関数ポインタを二個挟んで呼び出すのと同等らしい

939 :デフォルトの名無しさん:2009/01/05(月) 13:21:19
2回分で2〜3倍くらいの時間ならまぁそんなもんかと
思ったんだろうが、5倍超えるとなるとちょっと萎える。
あとfunctionのみでもbindと同じくらい遅くなるんだよね。

ただしfunctionにbindした関数を入れた場合でも、
さらに大幅に遅くなったりはしないのが不思議だった。

940 :デフォルトの名無しさん:2009/01/05(月) 13:25:39
関数呼び出し単体の時間差を測っても意味無いだろ。
10ns が 50ns になったからって、関数本体の処理が 10us あったらボトルネックにはなり得ない。

941 :デフォルトの名無しさん:2009/01/05(月) 13:35:38
いやなりえる。
具体的にはエミュレーターとか仮想マシンのオペコードの処理が
関数ポインタの配列になってた部分を、function+bindに変えたらなった。

942 :デフォルトの名無しさん:2009/01/05(月) 13:37:06
>>941
ちっとも具体的じゃないんだけど、その関数の処理は>940の書いている通り10usも掛かっていたのか?

943 :デフォルトの名無しさん:2009/01/05(月) 13:41:40
あーすまん。ちゃんと読んでなかった

944 :デフォルトの名無しさん:2009/01/05(月) 13:58:15
"How much overhead does a call through boost::function incur?"
http://www.boost.org/doc/html/function/faq.html#id2914497

945 :デフォルトの名無しさん:2009/01/07(水) 14:52:32
だれか、これやろうぜ。
http://vs-e.net/


946 :デフォルトの名無しさん:2009/01/07(水) 18:06:44
>>945
これってなんだ?

947 :デフォルトの名無しさん:2009/01/07(水) 18:28:18
宣伝

948 :デフォルトの名無しさん:2009/01/07(水) 19:14:17
mpl::apply_ifが使えなかったので1.32から1.37にアップグレードしてみました。
結果version.hppの中で#define BOOST_VERSIONが10370になったのですが、やっぱりmpl/apply_if.hppが見あたりません。
grepで探してもapply_ifが見あたらないのですが、apply_ifは何をインクルードすれば使えるのでしょうか。

949 :デフォルトの名無しさん:2009/01/07(水) 19:21:44
ttp://www.boost.org/doc/libs/1_37_0/libs/mpl/doc/tutorial/renaming-cleanup.html
> The apply_if metafunction has been renamed to eval_if.

950 :デフォルトの名無しさん:2009/01/07(水) 19:28:21
ありがとうございます。

951 :デフォルトの名無しさん:2009/01/09(金) 19:07:44
更新しました。
ttp://booster.x0.to/
今回から、DocBook形式のドキュメントもビルドし同梱する様に致しました。

952 :デフォルトの名無しさん:2009/01/10(土) 11:30:14
oven,eggもよろしく
http://pc11.2ch.net/test/read.cgi/tech/1231080841/

953 :デフォルトの名無しさん:2009/01/10(土) 11:40:36
乙951

954 :デフォルトの名無しさん:2009/01/10(土) 17:00:40
regex_searchで、後ろから逆順に検索する方法ってありますか?

955 :デフォルトの名無しさん:2009/01/10(土) 17:05:28
>>954
つreverse iterator

956 :デフォルトの名無しさん:2009/01/10(土) 17:11:54
さっきからreverse iterator使ってみてるんですが、

boost::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

957 :デフォルトの名無しさん:2009/01/10(土) 17:17:32
reverse iteratorだと1文字のものしかマッチしないんじゃないの?

958 :デフォルトの名無しさん:2009/01/10(土) 18:59:19
wchar_t

959 :デフォルトの名無しさん:2009/01/10(土) 19:16:12
lambdaの実装を眺めていて変態だというのはわかったのですが、気になったことがあるので教えてください。
たとえば_1+3とか書くとlambda_functorの中でplus_actionが呼ばれるように理解しましたが、
これは要するに、コンパイラが+演算子を適用する代わりにplus_actionというファンクタを勝手に呼び出してくれてるということですよね。
ということは、(_1%2)*2みたいに書くと二段階にファンクタを呼ぶ=関数ポインタを二回探しに行くという理解で正しいでしょうか?
もしそうならpod型なんかが相手だともったいないと思うのですが、コンパイル時の最適化で吸収してくれてたりするのでしょうか。
なんだか書いていてスレ違いなんじゃないかって気もしてきましたが、よろしくお願いします。

960 :デフォルトの名無しさん:2009/01/10(土) 19:24:19
>>959
最適化してくれるかどうかなんてコンパイラ依存だろう。
特定の実装について知りたいなら試せばいい。

961 :デフォルトの名無しさん:2009/01/10(土) 19:36:11
うむむ、なるほど。たしかに言われてみればコンパイラ依存が大きそうな感じですね。
デバッガの使い方いまいち理解できてないんですが、簡単なコードで奮闘してみます。ありがとうございました。

962 :デフォルトの名無しさん:2009/01/12(月) 16:15:24
1.36のserializer腐ってないか?

963 :デフォルトの名無しさん:2009/01/12(月) 16:18:02
具体的に

964 :デフォルトの名無しさん:2009/01/12(月) 17:53:09
BOOST_CLASS_EXPORTを使うと、C2371エラーがでまくる
アホだろこれ

965 :デフォルトの名無しさん:2009/01/12(月) 18:16:22
ソースを晒せ。
話はそれからだ


966 :デフォルトの名無しさん:2009/01/12(月) 18:28:08
まあ、たとえばこんな感じでFooを継承したクラスを複数作ったんだが
「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 ) ;

967 :デフォルトの名無しさん: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 ;
}
} ;

968 :デフォルトの名無しさん:2009/01/12(月) 19:21:18
自己解決した。
実装をcppのほうに移したらコンパイルが通った。

969 :デフォルトの名無しさん:2009/01/12(月) 20:46:53
おまえがうんこだったんだろ

970 :デフォルトの名無しさん:2009/01/15(木) 10:31:43
boost::bind について教えてください

int 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はどう記述すればよいでしょうか?

971 :デフォルトの名無しさん:2009/01/15(木) 10:42:16
>>970
根本的に間違って覚えてないか?
pFunc = bind(&func,_1,20);
でやってみ

972 :デフォルトの名無しさん:2009/01/15(木) 12:43:44
_1 や _2 はbindが返した関数オブジェクトの何番目の引数かってこと

突っ込まれるのが恐い・・・・

973 :デフォルトの名無しさん:2009/01/15(木) 13:40:51
やらないか?

974 :デフォルトの名無しさん:2009/01/15(木) 21:23:03
なにを?

975 :デフォルトの名無しさん:2009/01/16(金) 02:46:58
>>973 ネタにマジレス

976 :デフォルトの名無しさん:2009/01/16(金) 02:47:30
あれ >>974 だった

977 :デフォルトの名無しさん:2009/01/16(金) 09:12:28
>>975
ネタにマジレス乙

978 :デフォルトの名無しさん:2009/01/16(金) 21:11:08
更新しました。
ttp://booster.x0.to/

979 :デフォルトの名無しさん:2009/01/17(土) 00:30:51
更新しました。
ttp://boooster.x0.to/

980 :デフォルトの名無しさん:2009/01/17(土) 03:54:54
ちょっと思い付いたので、boost::any用のMC++D風マルチメソッドを実装してみました。
(実装)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用ね。

トランポリン関数を事前に登録しなきゃいけないのがちょっと面倒なんだけど、なんか上手い回避方法ある?


981 :980:2009/01/17(土) 16:14:37
反応無いな……マルチメソッドには興味無いのかな。
上記をポリシーベースに分割してみました。

誰かトランポリン関数の上手い処理の仕方を教えてくれぇ……

982 :デフォルトの名無しさん:2009/01/17(土) 22:50:13
shared_ptrでカスタムデリータを使おうと思うのですが、デリータの指定を忘れないようにデストラクタをprotectedにして罠をかけました。
でも、派生させるとデストラクタが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;
}


983 :980:2009/01/17(土) 23:27:08
>982
一番簡単なのは、生でコンストラクトするのは禁止して必ず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());
 };
};


984 :デフォルトの名無しさん:2009/01/17(土) 23:31:40
ちょっと修正

class 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を抽象クラスにしないのはなんか気になるなぁ……

985 :デフォルトの名無しさん:2009/01/18(日) 01:12:11
なるほど、createを使ってdeleterを隠蔽するのか。1箇所のクラスの定義でcreateの実装を忘れなければ、多数のインスタンスを作るところでミスらないから問題ないってことですね。

986 :デフォルトの名無しさん:2009/01/18(日) 01:51:03
そうそう >985
各クラスでcreateを実装し忘れると痛い目に会うけど、newする毎に気を付けるよりはよっぽどマシ。



987 :デフォルトの名無しさん:2009/01/18(日) 02:40:14
createをテンプレート関数にして基底クラスに判定用のメンバ突っ込んで
delete時にcreateを通してないかチェックできるようにすれば多少安全になるんでは

236 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)