07/12/21 12:57:01
内輪で使うために作ったWindows版のバイナリパッケージを晒します.
ビルド環境
Visual Studio 2005 Professional SP1 日本語版
Visual C++ 2008 Express Edition 英語版
vc8 と vc9 でビルドするスクリプト
URLリンク(svn.windy.cx)
trunk の Windows 用インストーラつきバイナリパッケージ
C:\Program Files\boost\boost_1.35_20071202 以下に展開されます
アンインストールはディレクトリごと削除するだけ
ヘッダ(共通)
URLリンク(svn.windy.cx)
vc8用スタティック
URLリンク(svn.windy.cx)
vc8用DLL
URLリンク(svn.windy.cx)
vc9用スタティック
URLリンク(svn.windy.cx)
vc9用DLL
URLリンク(svn.windy.cx)
自分はスタティックライブラリしか使わないのでDLL版の動作は未検証.
GMP, MPFR, MPFR++ などのバイナリパッケージも.
URLリンク(svn.windy.cx)
207:205
07/12/21 13:06:06
パッケージは exe だけど,実体は自己展開 cab なので
拡張子を cab に変えればたいていのアーカイバで開けます.
あと,ランタイムに関してですが /MD と /MDd です.
208:206
07/12/21 13:06:56
名前欄間違えた.
209:デフォルトの名無しさん
07/12/21 18:17:17
>>205
static_cast<void (ClassA::*)(int)>(&ClassA::MethodB)
みたいに明示的にキャストしないと通らないと思った。
210:デフォルトの名無しさん
07/12/21 19:11:54
>>209
∩
( ⌒) ∩_ _
/,. ノ i .,,E)
./ /" / /" .
_n グッジョブ!! ./ /_、_ / ノ'
( l _、_ / / ,_ノ` )/ /_、_ グッジョブ!!
\ \ ( <_,` )( /( ,_ノ` ) n
ヽ___ ̄ ̄ ノ ヽ |  ̄ \ ( E)
/ / \ ヽフ / ヽ ヽ_//
VC9用をいただきました
211:210
07/12/21 19:13:04
間違えた
>>209 ×
>>206 ○
212:デフォルトの名無しさん
07/12/23 16:13:54
正規表現で調べる文字列にcharやwchar_tの配列は使用できないのでしょうか
213:デフォルトの名無しさん
07/12/23 17:06:19
>>212
char*やイテレータを取るバージョンがあるはずだが
214:デフォルトの名無しさん
07/12/23 18:15:20
>>213
以前のバージョンということですか?
できればxpressiveで書きたいので、最近のバージョンを使いたいのですが
それでは無理ってことでしょうか
215:デフォルトの名無しさん
07/12/23 18:34:45
バージョンと言うかオーバーロードな
と言うかリファレンス見たら?
216:デフォルトの名無しさん
07/12/23 22:54:20
>>215
つ 特殊化
217:デフォルトの名無しさん
07/12/23 23:22:28
つか入力にイテレータ取るバージョンがあれば当然ポインタ食わせられるだろ。
218:デフォルトの名無しさん
07/12/23 23:55:17
sregexがstd::string版なら、cregexがconst char*版。
Xpressiveでは、イテレータの型をテンプレート引数で指定する。
URLリンク(boost.org)
219:デフォルトの名無しさん
07/12/24 08:12:02
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(),
boost::bind(operator<<, std::cout, _1));
このようにして各要素を出力することはできないのでしょうか?
なぜだか error C2065: '<<' : undeclared identifier
と言われてコンパイルできません.
220:219
07/12/24 08:54:23
boost::bind に関するこのコードでなぜ最後のコメント部分の
コンパイルが通らないのでしょうか?
URLリンク(pastebin.windy.cx)
221:デフォルトの名無しさん
07/12/24 09:25:58
コンパイルできない理由はちょっとわからんけど、これじゃダメなん?
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));
222:デフォルトの名無しさん
07/12/24 09:38:51
>>220
g++だと<unresolved overloaded function type>と言われたのでstatic_castしたら通った。
std::for_each(v.begin(), v.end(), boost::bind(
static_cast<A &(A::*)(int)>(&A::operator =),
&a,
_1));
223:デフォルトの名無しさん
07/12/24 09:43:23
>>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、
そのコードでは、正しいoperator <<へ辿り着けない。
もっとも、それ以前の問題でコンパイルエラーになっているようだが。
今回は221のいうとおりostream_iteratorもあるし、
その他演算子一般の場合は、bind使えなくてもlambdaがある。
224:219
07/12/24 09:48:19
>>221
いや,もちろんそれでやりたいこととしてはOKなんですが,
一般的な演算子を指定できれば応用範囲も広がるかなと思って.
>>222
VC9 だとテンプレートを検索しまくって
「あれでもない,これでもない」と C2780 を連発した揚句,
時々 ambiguous だというエラーも出るんですよ.
なるほど, g++ でもそのままでは通らなくて,
static_cast すれば通るんですね. operator() だと問題なくて
operator= だと問題になる理由がわからないですが.
既定の代入演算子が別途用意されてしまうからかなぁ.
自前で = をオーバーロードした時って既定の = は
定義されないんでしたっけ?
でも独自にコンストラクタを作ってもコピーコンストラクタは
勝手に作られていたような気がする.
225:219
07/12/24 09:51:05
>>223
なるほど,それで operator<< が見つからないと怒られてるんですね.
たぶんグローバル名前空間の operator<< を探しに行って「無い」
と怒ってるように思います.
自分はてっきりストリームの << 演算子はグローバル名前空間に
定義されていて必要なクラスに friend 指定されているのだと
思っていました.
226:デフォルトの名無しさん
07/12/24 11:35:14
>>224
boost::bindはlambdaと違って一旦メンバーポインタにするから。
だからoverloadされてるとまずい。