- 1 名前:BOOTS [2007/10/18(木) 08:09:35 ]
- 語って.はぁと part boost::mpl::int_<5>
過去スレ part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/ part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/ part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/ part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/ ■関連サイト■ Boost C++ Libraries www.boost.org/ Boost 翻訳プロジェクト boost.cppll.jp/HEAD/ Let's Boost www.kmonos.net/alang/boost/ boost info shinh.skr.jp/boost/
- 177 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 07:11:53 ]
- boost::multi_index_container で
boost::multi_index_container::tag を使うと Visual C++ 2008 ではエラーになる. C1001 なので原因がよくわからない.
- 178 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 10:41:48 ]
- bindとlanbdaを同時に使うとき
#include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> using namespace boost; using namespace boost::lambda; とすると、_1 を使ったときコンパイルできなくなる。 boost::lambda::_1 なんてやるとコンパイルできる。 プレースホルダー _1 ってbind.hppでもlambda.hppでも 重複して定義されてる?
- 179 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 10:46:27 ]
- 俺、ファンクタの合成くらいにしか使わないので、
結局 boost::bind だけしか使わないようにした。 って、それじゃ根本的な解決になってないか。
- 180 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:10:44 ]
- >>178
その通り usingの代わりにnamespaceの短縮名を使うと良いと思う
- 181 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:32:47 ]
- >>180
ありがとう。 で、namespaceの短縮名とは何ですか? boost::lambda::_1のように常に明示的に 指定するということですか?
- 182 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:35:49 ]
- >>181 namespace bl = boost::lambda;
- 183 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:33:53 ]
- >>182
ありがとう。 別名を与えられることは知りませんでした。 これで対応していきます。
- 184 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 15:48:19 ]
- bjamのv2の使い方が良く分からないんですが、例えば以下をv2で
書く場合、どのように書いたら良いんでしょうか? #bjam -sTOOLS=mingw "-sBUILD=release <runtime-link>static <threading>multi <native-wchar_t>on" --prefix=/c/msys/1.0/local install
- 185 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:59:08 ]
- libcgi とか libcgi++ とか libcurl の asio 利用版
なんてのもでてくるのかね?
- 186 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:14:30 ]
- sregex r = sregex::compile( "A([1-9]*|[a-z]*)A" );
string str1 = "A123A AaaaA A3b3A A9A"; if( regex_search( str1, m, r ) ) { ... } で、 "123" "aaa" "3b3" "9" という文字列を取り出すにはどういう記述をすればいいでしょうか? m[2].str() とか書いても、aaaとか取得できないんです。 sregexでなくxpressive利用でもいいです。
- 187 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:35:19 ]
- const_iterator begin()const;
Effects: Returns a starting iterator that enumerates over all the marked sub-expression matches stored in *this. const_iterator end()const; Effects: Returns a terminating iterator that enumerates over all the marked sub-expression matches stored in *this.
- 188 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:35:19 ]
- regex_searchじゃなくてregrex_iteratorでも使っとけ
- 189 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 00:40:01 ]
- regex_searchで
最小マッチ?を指定するとダイアログ出て落ちるんです
- 190 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:46:33 ]
- エスパー魔美
- 191 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 20:10:54 ]
- pastebin.windy.cx/?page=view&id=1197803292
boost::serialization::base_object を経由せずに (Base&) で型変換してシリアライズするのはダメ? 一応読み込むこともできているようなんだけど. ちなみに (Base) で型変換するとスライシングのせいか 読み込んだ時に正しく読み込むことができません.
- 192 名前:デフォルトの名無しさん [2007/12/16(日) 20:37:23 ]
- Resist the temptation to just cast *this to the base class.
This might seem to work but may fail to invoke code necessary for proper serialization. マニュアルにはこう書かれているけど,かといって private で 継承した基底クラスをシリアライズするためには >>191 みたいにしないとだめだよねぇ?
- 193 名前:デフォルトの名無しさん [2007/12/17(月) 10:40:42 ]
- www.boost.org/libs/serialization/example/demo_shared_ptr.cpp
ここには基底クラス A の shared_ptr に派生クラス B のポインタを 持たせてシリアライズしています。なお、 A は仮想デストラクタを 持っています。このとき boost::archive::text_oarchive oa(ofs); oa.register_type(static_cast<B *>(NULL)); oa.register_type( static_cast< boost::detail::sp_counted_base_impl< B *, boost::checked_deleter<B> > * のように register_type しなければならないようなのですが、 BOOST_CLASS_EXPORT マクロのようなもので登録できない ものでしょうか? archive を生成してから毎回登録するのは 忘れてしまいがちなので。
- 194 名前:193 [2007/12/17(月) 11:14:31 ]
- というか、register_type で何を登録すればいいのかがわからん。
archives.free.net.ph/message/20071129.235833.ba9e02a9.en.html でまさしく同じ問題についてQ&Aがあるんだけど、 結局上の URL の例をみろってことだけなんだよなぁ。
- 195 名前:193 [2007/12/17(月) 11:24:03 ]
- pastebin.windy.cx/?page=view&id=1197858127
どうやらこれだけでいいみたい。 でも文字化けしてしまった… #そのうち他言語対応しておきます。
- 196 名前:193 mailto:sage [2007/12/17(月) 11:25:44 ]
- 他言語→多言語 orz
しかも sage てなかった orz-----3
- 197 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 16:56:24 ]
- Boost と POCO ってなかよしなの?
asio とか filesystem とかかぶってるみたいだけど.
- 198 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:34:06 ]
- VS 2008 EE 日本語版
- 199 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:06:51 ]
- class B{
public: virtual void mf(); }; class D : public B { public: void mf(); }; のように継承関係にあるクラスについて shared_ptrはポリモルフィックに動作しますか? つまり、 shared_ptr<B> bp(new D); bp->mf() で D::mf() が呼ばれることはboostの仕様として 保障されてますか?
- 200 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:09:44 ]
- はい
- 201 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:42 ]
- thx
- 202 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 00:25:47 ]
- #include "stdafx.h"
#include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/lambda/if.hpp> #include <vector> #include <algorithm> using namespace std; namespace bl = boost::lambda; int main() { unsigned int a[] = {0, 1, 1, 0, 1, 0, 0, 1}; for_each(a, a + sizeof(a)/sizeof(a[0]), bl::if_(bl::_1 % 2 == 0) [cout << "偶数\n"].else_[ cout << "奇数\n"] ); } これをコンパイルすると private メンバ (クラス 'std::basic_ios<_Elem,_Traits>' で宣言されている) にアクセスできません。 とエラーが出てコンパイルできません。原因は何でしょうか? VC++ 2008 コンソールアプリケーションです。
- 203 名前:202 mailto:sage [2007/12/21(金) 00:44:29 ]
- 自己解決しました。
- 204 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 00:54:37 ]
- わざわざ通知ありがとうございました。
- 205 名前:デフォルトの名無しさん [2007/12/21(金) 12:42:34 ]
- boost::bind(&ClassA::MethodB, this, _1)
みたいなファンクタを生成するとき,ClassA に MethodB が複数 (void MethodB(int) と void MethodB(double)とか) 定義されていたら,どちらのメンバ関数ポインタになるんでしょうか?
- 206 名前:デフォルトの名無しさん [2007/12/21(金) 12:57:01 ]
- 内輪で使うために作ったWindows版のバイナリパッケージを晒します.
ビルド環境 Visual Studio 2005 Professional SP1 日本語版 Visual C++ 2008 Express Edition 英語版 vc8 と vc9 でビルドするスクリプト svn.windy.cx/websvn/listing.php?repname=Building.boost-trunk&path=%2F&sc=0 trunk の Windows 用インストーラつきバイナリパッケージ C:\Program Files\boost\boost_1.35_20071202 以下に展開されます アンインストールはディレクトリごと削除するだけ ヘッダ(共通) svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-header.exe vc8用スタティック svn.windy.cx/pub/boost_1_35_20071202-vc8.exe vc8用DLL svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc8-dll.exe vc9用スタティック svn.windy.cx/pub/boost_1_35_20071202-vc9.exe vc9用DLL svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc9-dll.exe 自分はスタティックライブラリしか使わないのでDLL版の動作は未検証. GMP, MPFR, MPFR++ などのバイナリパッケージも. svn.windy.cx/
- 207 名前:205 mailto:sage [2007/12/21(金) 13:06:06 ]
- パッケージは exe だけど,実体は自己展開 cab なので
拡張子を cab に変えればたいていのアーカイバで開けます. あと,ランタイムに関してですが /MD と /MDd です.
- 208 名前:206 mailto:sage [2007/12/21(金) 13:06:56 ]
- 名前欄間違えた.
- 209 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 18:17:17 ]
- >>205
static_cast<void (ClassA::*)(int)>(&ClassA::MethodB) みたいに明示的にキャストしないと通らないと思った。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 19:11:54 ]
- >>209
∩ ( ⌒) ∩_ _ /,. ノ i .,,E) ./ /" / /" . _n グッジョブ!! ./ /_、_ / ノ' ( l _、_ / / ,_ノ` )/ /_、_ グッジョブ!! \ \ ( <_,` )( /( ,_ノ` ) n ヽ___ ̄ ̄ ノ ヽ |  ̄ \ ( E) / / \ ヽフ / ヽ ヽ_// VC9用をいただきました
- 211 名前:210 mailto:sage [2007/12/21(金) 19:13:04 ]
- 間違えた
>>209 × >>206 ○
- 212 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 16:13:54 ]
- 正規表現で調べる文字列にcharやwchar_tの配列は使用できないのでしょうか
- 213 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 17:06:19 ]
- >>212
char*やイテレータを取るバージョンがあるはずだが
- 214 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:15:20 ]
- >>213
以前のバージョンということですか? できればxpressiveで書きたいので、最近のバージョンを使いたいのですが それでは無理ってことでしょうか
- 215 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:34:45 ]
- バージョンと言うかオーバーロードな
と言うかリファレンス見たら?
- 216 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:54:20 ]
- >>215
つ 特殊化
- 217 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:22:28 ]
- つか入力にイテレータ取るバージョンがあれば当然ポインタ食わせられるだろ。
- 218 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:55:17 ]
- sregexがstd::string版なら、cregexがconst char*版。
Xpressiveでは、イテレータの型をテンプレート引数で指定する。 boost.org/doc/html/xpressive/reference.html#header.boost.xpressive.xpressive_fwd.hpp
- 219 名前:デフォルトの名無しさん [2007/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 [2007/12/24(月) 08:54:23 ]
- boost::bind に関するこのコードでなぜ最後のコメント部分の
コンパイルが通らないのでしょうか? pastebin.windy.cx/?page=view&id=1198454028
- 221 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:25:58 ]
- コンパイルできない理由はちょっとわからんけど、これじゃダメなん?
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));
- 222 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:43:23 ]
- >>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、 そのコードでは、正しいoperator <<へ辿り着けない。 もっとも、それ以前の問題でコンパイルエラーになっているようだが。 今回は221のいうとおりostream_iteratorもあるし、 その他演算子一般の場合は、bind使えなくてもlambdaがある。
- 224 名前:219 mailto:sage [2007/12/24(月) 09:48:19 ]
- >>221
いや,もちろんそれでやりたいこととしてはOKなんですが, 一般的な演算子を指定できれば応用範囲も広がるかなと思って. >>222 VC9 だとテンプレートを検索しまくって 「あれでもない,これでもない」と C2780 を連発した揚句, 時々 ambiguous だというエラーも出るんですよ. なるほど, g++ でもそのままでは通らなくて, static_cast すれば通るんですね. operator() だと問題なくて operator= だと問題になる理由がわからないですが. 既定の代入演算子が別途用意されてしまうからかなぁ. 自前で = をオーバーロードした時って既定の = は 定義されないんでしたっけ? でも独自にコンストラクタを作ってもコピーコンストラクタは 勝手に作られていたような気がする.
- 225 名前:219 mailto:sage [2007/12/24(月) 09:51:05 ]
- >>223
なるほど,それで operator<< が見つからないと怒られてるんですね. たぶんグローバル名前空間の operator<< を探しに行って「無い」 と怒ってるように思います. 自分はてっきりストリームの << 演算子はグローバル名前空間に 定義されていて必要なクラスに friend 指定されているのだと 思っていました.
- 226 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:35:14 ]
- >>224
boost::bindはlambdaと違って一旦メンバーポインタにするから。 だからoverloadされてるとまずい。
|

|