Boostを語れゴラァ part5
■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS
2007/10/18(木) 08:09:35過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/
■関連サイト■
Boost C++ Libraries
http://www.boost.org/
Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/
Let's Boost
http://www.kmonos.net/alang/boost/
boost info
http://shinh.skr.jp/boost/
0002デフォルトの名無しさん
2007/10/18(木) 08:10:02Boost 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++相談室 part58
http://pc11.2ch.net/test/read.cgi/tech/1190745673/
【C++】STL(Standard Template Library)相談室 7
http://pc11.2ch.net/test/read.cgi/tech/1185986999/
0003デフォルトの名無しさん
2007/10/18(木) 08:10:07Loki
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/
0004デフォルトの名無しさん
2007/10/18(木) 12:31:010005デフォルトの名無しさん
2007/10/18(木) 19:28:37ミ お っ 立 も __ノ _,.ヘ _,,... -- ─--「::「 {i:.:.:`'、_/:.:.:.:.:.[/-...,,_ ソ ,' い
Ξ っ あ て っ ) /::7ヽ、ヘ,.-ァ'^ヽ∠ヽ,/L__`|:::|/}!.:.:.:.:r7=-:.:.:.:.!7::::::::::::`ヽ. ッ i け
ニ 立 ぁ な も !::::!´ア「>'‐''"´ `"'<LL_,'i>:'へ、:.:.:.:.:.:.r/::::::::::::::::::::::':., .|. な
Ξ て ん い う /´\「>'" ァ':::::::::::::::\__」}:::::::::::::::::::::::::::::ヽ.! い
三 ち ・ っ 糞 ,' _」ア´ / /! ! /! / ;'::::!:::::::';:::';::::::::ヽ::::::':;::::::::::::::、::::! 子
= ゃ ・ て ス i 'ヽ! / 7, 'イハ /! メ、,!__ハ, 'i::::::ト,::::::!::::i::::i:::::::':;:::::';:::::::::::::::ヽ;| ね
三 ぁ ら 約 レ ', .,' / /!,!-'、:レ' |/ァ' レ ヽ!::!:::! ':;:::|ー!-ハ::::::::i:::::::!::::::::':;:::::::ヽ:
= ら め 束 は !/ ;' ,ヘ!i. i,.ハ 、,_ !!::!:;ハ ヽ,jァr-;、!_ハ」:::::;':::::::::::::ヽ,::::::::;ゝ、.,__
ニ め っ っ ・ ノへ,/レヘ, ! ゝ' ....::::::... '  ̄´゚o'レヘjソ :::.. 」_r!`> 7__/:::::i::::::::::::::
三 ぇ ・ ・ ・ ! ノ; ./7''"/// /// !/. ! '"'",':::::::!::::::i:::::::::::i 変
= ぇ も ・ ・ ノ; / ,' ゝ、 ( ヽ u ( ) ハ !:::::;'::::::::':;::::::!. 態
三 ぇ う ・ あ 〈,へレ'〈ジi/ミ>.、..,,____ ,. イ ( )`ヽ. ̄フ !:::/i_;;::;;_:::::< さ
≡, ぇ 糞 は ぁ i `:、レ'"´ !_r'"レ'/:::::::::>ァ、/|ヘ ヽ,__,..,.-''" ̄`ヽ、_ヽ:::':;! ん
Ξ, ぇ .ス ぁ っ ':, `ヽ、 ,r;く:::::::!/::::::::::::/」;' `ヽ. _>'" Yヽ:::::!. ?
彡 ! レ ん っ ヽ、 ,.kヘ_!::::ム:::::::/]/ ,ァ-'‐''"´ ヽ!、_ 〉:.!.
0006デフォルトの名無しさん
2007/10/19(金) 11:59:310007デフォルトの名無しさん
2007/10/19(金) 20:36:200008停止しますた
2007/10/24(水) 12:55:390009デフォルトの名無しさん
2007/10/24(水) 12:56:170010デフォルトの名無しさん
2007/10/26(金) 11:37:430011停止しますた
2007/10/26(金) 11:38:170012デフォルトの名無しさん
2007/10/27(土) 03:28:330013745
2007/10/27(土) 03:54:01#include <boost/lambda/bind.hpp>
#define BOOST_MEM_FN_ENABLE_STDCALL
#define BOOST_BIND_ENABLE_STDCALL
#include <boost/bind.hpp>
struct F
{
int __stdcall f(int) { return 0; }
};
int main(void) {
namespace bll = boost::lambda;
F f;
boost::bind( &F::f, &f, bll::_1 )(1);
// bll::bind<int>( &F::f, &f, bll::_1 )(1); <- error!!
}
__stdcallの関数はboost::lambda::bindでは呼びだせないんでしょうか?
boost.usersで次のような古い記事を見付けたのですが
ttp://tinyurl.com/34cv9e
この通りに戻り値を明示的に指定しても無駄なようです
0014デフォルトの名無しさん
2007/10/27(土) 06:25:200015デフォルトの名無しさん
2007/10/27(土) 19:41:25〈 ,.'"´ ̄  ̄`ヽ、.:::::::.:.:./
V´ .::l:|:. `、ヽミミヽ、 ヾ:./ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ .::l::从ト、 `ヾ_ミミヽ、 ヽ < 君さぁこんなスレッド立てるから
l/l.:l.:リ仁リニトト、仁≧ミヽ:::ト、 .:::| | 厨房って言われちゃうんだよ
`Y::{fトッソ ``ト。ッソ` 1:l:|::`、:::::! \______________
|.::l´¨ 、 ´ ̄ /::リ::::::::V
ヽ:ヽ、 ー , タ::l:;:::::::/ , -‐─‐‐- 、
, -─-、 __ , イ/.::j:|:::/l/ , ィ"´ ‐f ‐ \
/., `トい、_,/^i.:l:|/ .// , -──‐- 、`ヽ\
/.:::/ .:i {{i^Y^YYy'l/ 〈 〃 ,ィ´ .:.:.:.:.::.:::::i::l:.\j ト、
/.:.::::/ .:.::| k1 |:l ,ム;、ハ、 V__/:::l/::::/:/.::::,イ.:::ハ!:l::::::.:V / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
L.::::厂ヽ .:.:::::| / {j! ーイ:介;l/ ,ハ /ハ!::/l:::/:/.::;ィイ/:::ハ:::|:::i.:.::{/ < おまえのことを必要としてる奴なんて
{7 / \::::! / jfl |:1j! |:|{ Vi l:1ホ{:::l:i;:ィニー 、//-十1:,'.:.:,リ | いないんだからさっさと回線切って首吊れ
// ,.イ:::l/ jf| l;」jl j:」| |::H:| {::l:iイヒリソヽ イヒッソl/, イ/ \_________________
/´ ̄ /::::|:;:;.\ kiL, H fj 〉; |:ト、_,{::ト.、_' ' ' '  ̄ / /i
_>ーー- ,.イヽ、::l;;;:;:;:;(:::/タ^Tニム、_ ,';{:/ |:|:::Y´「 ̄`ハ、 `´ , .イ _j/::|
/。 ̄`¨`ヽ_ソ `1>‐-ヽ{:::::/><!::::::7 |i::ノ { /.::`K T.::::/ /.:::|
,/。 / 〉ニ三云\:.ヽ<ノ::::::」ヽ. Y ,レ'´.::::::::::.〉ハコ``Y::.ヽ
/ / /¨´ ̄ ̄`ヽ、三三ミ<::::| | //.:::::::::::::::://´j}ト、 _」::::::|
0016デフォルトの名無しさん
2007/10/27(土) 19:47:44不覚にも噴いた
0017デフォルトの名無しさん
2007/10/27(土) 22:54:09boost::type
boost::bool_
boost::int_
boost::integral_c
あたりをどうぞ。これもFAQ気味だな。
0018745
2007/10/27(土) 22:59:46これを適当にカスタマイズして使うのがよろしいんじゃないでしょうか?
001914
2007/10/28(日) 08:11:33>>17
すみません説明不足でした。
多重ディスパッチによるマルチメソッドです。(Loki::BasicDispatcherとか)
>>18
boost vaultは初めて知りました。(よくみたらLet's Boostにもリンクはってありますね)
ソース見たところ、Lokiの物よりかなり機能が弱く感じます。
Lokiを使うのがいいのかもしれません。
0020デフォルトの名無しさん
2007/10/28(日) 18:48:54// Just a simple "type envelope". Useful in various contexts, mostly to work
// around some MSVC deficiencies.
ファイルには上記のように書いてありますがどういうこと?
0021デフォルトの名無しさん
2007/10/28(日) 20:11:24を
f<int>();
と呼べない場合があるので
template<class T> T g(boost::type<T>);
を
g(boost::type<int>());
と呼ぶ
0022デフォルトの名無しさん
2007/10/29(月) 14:56:29ディスパッチのユーティリティとして使うとか。
boost/type_traits/detail/wrap.hpp とかもあるね。
template <class T> struct type {};
template <class T>
struct tester {
template <class U> static char (&test(U*))[1];
template <class U> static char (&test(type<U>*))[2];
template <class U> static char (&test(...))[3];
template <class U> static size_t f1(const U&) {
return sizeof(test<T>(static_cast<U*>(0)));
}
template <class U> static size_t f2(const U&) {
return sizeof(test<T>(static_cast<type<U>*>(0)));
}
};
struct X {};
struct XX : X {};
tester<X>::f1(X()); // => 1
tester<X>::f1(XX()); // => 1
tester<X>::f2(X()); // => 2
tester<X>::f2(XX()); // => 3
0023デフォルトの名無しさん
2007/10/30(火) 23:24:10bool operator()(const char* left, const char* right) const{
return std::strcmp(left, right) < 0;
}
}
typedef std::map<const char*, std::string, char_p_less> QueryMap;
これをLambdaを使って実現したいんですが、Lambda式で書いた結果は関数オブジェクトの値であって、型ではないので
typedef std::map<const char*, std::string, (bind(std::strcmp, _1, _2) < 0) > QueryMap;
このようなことが出来ないです。
typedef std::map<const char*, std::string, function2<bool, const char*, const char*> > QueryMap;
boost::function2<bool, const char*, const char*> compare = (bind(std::strcmp, _1, _2) < 0);
こうしてから使うときに
QueryMap foo(compare);
するしかないですか?
0024デフォルトの名無しさん
2007/10/30(火) 23:28:50template<class T>
void use_query_map(const T&){
typedef std::map<const char*, std::string, T> QueryMap;
QueryMap foo;
// fooを使う
}
これで、この関数内では使い放題です。
0025デフォルトの名無しさん
2007/10/30(火) 23:30:05を書くのを忘れていました。
0026デフォルトの名無しさん
2007/11/02(金) 00:21:10boost::function1のオブジェクトを指定することはできないんでしょうか?
>error C2660: 'boost::unit_test::make_test_case' : 関数に 4 個の引数を指定できません。
のような具合にどうにも通らないようです
#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <list>
void test_mask (int, int){}
struct sub_test_suite : public boost::unit_test::test_suite {
sub_test_suite() : test_suite("sub_test_suite") {
BOOST_PARAM_TEST_CASE(
(boost::function1<void,int>(boost::bind(&test_mask, _1, 0x80)))
, params.begin(), params.end());
}
private:
std::list<int> params;
};
using boost::unit_test::test_suite;
test_suite*
init_unit_test_suite( int, char* [] ) {
test_suite* test = BOOST_TEST_SUITE( "Parameterized boost::function based test case" );
// add test cases to test_suite
test->add( new sub_test_suite );
return test;
}
0027デフォルトの名無しさん
2007/11/02(金) 07:55:35このように直接callback1のテンポラリを作って渡してやれば一応コンパイルはできました
boost::functionに対する依存も減りますし、この方法使ってればいいんでしょうかね…
#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/bind.hpp>
#include <list>
// user definition test function
void test_mask (int, int) {}
// user definition test class
std::list<int> params;
using boost::unit_test::test_suite;
test_suite* init_unit_test_suite(int, char* []) {
test_suite* test = BOOST_TEST_SUITE("test");
BOOST_PARAM_TEST_CASE(
(boost::unit_test::callback1<int>(boost::bind(&test_mask, _1, 0x80)))
, params.begin()
, params.end()
);
return test;
}
0028デフォルトの名無しさん
2007/11/07(水) 23:22:17std::wstring sNumber = L"2007";
unsigned short wValue = boost::lexical_cast<unsigned short>(sNumber);
でbad_lexical_castが投げられてしまいます。
unsigned short以外の型では問題は無いのですが。
見あたらなかったのですが既知の問題ですか?
0029デフォルトの名無しさん
2007/11/08(木) 00:28:59wchar_t をビルトイン型として扱う (/Zc:wchar_t)
じゃない?
0030デフォルトの名無しさん
2007/11/09(金) 12:53:53でboostのコード閲覧がvisula studioみたいにできるけど
debugで変数の動きとか追いかけるのもemacsでVisualStudioみたいに
できる方法ないのかな
0031デフォルトの名無しさん
2007/11/09(金) 13:20:49ttp://www.coins.tsukuba.ac.jp/~yas/coins/compsys-2000/gdb-4.17-doc/gdb_6.html#SEC30
ttp://www.coins.tsukuba.ac.jp/~yas/coins/compsys-2000/gdb-4.17-doc/gdb_9.html#SEC57
0032デフォルトの名無しさん
2007/11/09(金) 13:25:53それをEmacsから操作できるようにするってのがまぁ妥当な方法かも
ただし無駄に面倒だから恐らくやってる人は極少数
なんでVSにはコマンドラインデバッガが無いんだろうね…
0033デフォルトの名無しさん
2007/11/09(金) 14:46:430034デフォルトの名無しさん
2007/11/09(金) 16:27:52gprof みたいなやつって Windows だとなに?
0035デフォルトの名無しさん
2007/11/09(金) 16:54:25けど、使いにくいと個人的には思う
0036デフォルトの名無しさん
2007/11/09(金) 17:04:000038デフォルトの名無しさん
2007/11/10(土) 12:01:39ttp://syrinx.q.t.u-tokyo.ac.jp/hashimoto/graph/
0039デフォルトの名無しさん
2007/11/10(土) 17:07:41>むしろ Visual Studio にプロファイラがついていないことが疑問。
Team Editionの一部にはついてるよ。
0040デフォルトの名無しさん
2007/11/10(土) 17:25:43結局それ以外使い物にならないのでは?
0041デフォルトの名無しさん
2007/11/10(土) 17:28:410042デフォルトの名無しさん
2007/11/10(土) 18:24:140043デフォルトの名無しさん
2007/11/11(日) 18:05:23いかにもロケール設定できてませんよって事態になります。
bjamを使わずに直接cl.exeやワイド文字を使うアプリを起動して表示すればちゃんと表示されのにも関わらずです。
以前のバージョンなら確かにcmd.exe以外のターミナルだろうが、cygwinのbashやzsh上だろうがNTemacsの中のシェルだろうが、
ちゃんと表示されてたんですが、皆様の環境ではどうでしょう?
004443
2007/11/11(日) 18:53:03適当なリビジョンのやつを落としてビルドしたバージョン3.1.14だとこの件に関しては正常に動作しました
0045デフォルトの名無しさん
2007/11/13(火) 03:50:17コンパイルは通るけど実行時にエラーでる
0046デフォルトの名無しさん
2007/11/14(水) 02:02:530047デフォルトの名無しさん
2007/11/14(水) 16:41:47どうやら
boost1.33.1 python2.4の組み合わせでしか動かないみたいです
0048デフォルトの名無しさん
2007/11/21(水) 19:49:45try {
unsigned short us = 0;
int i = 0;
(format("%1%, %2%") %us %i) = "0xABCD, -1234";
BOOST_CHECK_EQUAL(0xABCD, us);
BOOST_CHECK_EQUAL(-1234, i);
}
catch(const format_error& e) {
}
見たいな感じが理想です
0049デフォルトの名無しさん
2007/11/21(水) 19:50:48強いて挙げるならregexとかxpressiveか
0050デフォルトの名無しさん
2007/11/21(水) 19:52:29要するにscanf()のboost版が欲しいわけだ
一言で言えば、無いよ
005148
2007/11/21(水) 20:07:58xpressive->lexical_cast戦法でいきます
0052デフォルトの名無しさん
2007/11/21(水) 20:10:200053デフォルトの名無しさん
2007/11/21(水) 21:08:07悪かないと思うが。
0054デフォルトの名無しさん
2007/11/21(水) 23:15:23ちょうどいいサンプルもあることだし。
ttp://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/boost_xpressive/user_s_guide/semantic_actions_and_user_defined_assertions.html
005548
2007/11/22(木) 16:09:45こんなのあったのかー すごい・・・
でもasのなかでも呼ばれてるlexical_castが16進数とかを良きに計らってくれなくて俺涙目w
0056デフォルトの名無しさん
2007/11/22(木) 19:04:45spirit と bind に触発されて昔作ったもの。
sprintf や sscanf みたいなことを spirit っぽく静的に記述する。
string strA, strB;
sprint( strA, "1 " % !_x[6] % "/" % _s, 10, "aaaa" );
sprint( strB, "2 " % (!_0x[6]) % "/" %_s, 10, "aaaa" );
cout << strA << endl; // 1 0xa/aaaa
cout << strB << endl; // 2 0x000a/aaaa
int xA, xB;
string yA, yB;
sscan( strA, "1 " % _ws % _x % "/" % _s, xA, yA );
sscan( strB, "2 " % _x % "/" % _s[3], xB, yB );
print( cout, "xA = " % _d % "\nyA = " % _s % _endl, xA, yA );
print( cout, "xB = " % _d % "\nyB = " % _s % _endl, xB, yB );
// xA = 10
// yA = aaaa
// xB = 10
// yB = aaa
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5317.zip
0057デフォルトの名無しさん
2007/11/22(木) 23:37:260058デフォルトの名無しさん
2007/11/22(木) 23:48:110059デフォルトの名無しさん
2007/11/22(木) 23:49:16でも今の僕にはその技術はありませんでしたというオチ
0060デフォルトの名無しさん
2007/11/23(金) 14:17:00覚えなきゃならないなんて、C++は大変だな。
おまけにXMLやるならXML用のライブラリ、SQLやるならSQL用のライブラリと
キリがない。
C++もういいよ。終了。
0061デフォルトの名無しさん
2007/11/23(金) 14:19:41頭おかしいのかお前。
例えば、何の言語を使えば
MLやるのにXML用のライブラリを覚えなくていいのか
SQLやるのにSQL用のライブラリを覚えなくていいのか言ってみろ。
0062デフォルトの名無しさん
2007/11/23(金) 14:19:580063デフォルトの名無しさん
2007/11/23(金) 14:21:200064デフォルトの名無しさん
2007/11/23(金) 14:23:27俺は見てるから。
0065デフォルトの名無しさん
2007/11/23(金) 14:23:540066デフォルトの名無しさん
2007/11/23(金) 14:25:380067デフォルトの名無しさん
2007/11/23(金) 14:26:080068デフォルトの名無しさん
2007/11/23(金) 14:29:11MFCはライブラリで、CLIは実行環境ジャン。
0069デフォルトの名無しさん
2007/11/23(金) 14:48:170070デフォルトの名無しさん
2007/11/23(金) 14:48:25並外れて悪い頭を持って生まれてきた人には厳しいかもね。
0071デフォルトの名無しさん
2007/11/23(金) 15:17:290072デフォルトの名無しさん
2007/11/23(金) 15:23:360073デフォルトの名無しさん
2007/11/23(金) 15:35:05「あ、ヤバ!」と思った時、どれだけ自然に「さっきから竿を構えていた」かのように振る舞えるかがコツ
0074デフォルトの名無しさん
2007/11/24(土) 03:07:55後から釣りでしたって言った奴の負けだと思いますぅ〜♪
0075デフォルトの名無しさん
2007/11/24(土) 04:46:35わざわざ同じレベルに堕ちる必要はあるまいて
0076デフォルトの名無しさん
2007/11/24(土) 15:52:12おまえもな
0077デフォルトの名無しさん
2007/11/25(日) 17:16:34unit nYakuso = 7; //薬草1個の値段
unit nFukuro[10]; //持ち物を入れる袋
wstring strIppai(L"持ち物が\nいっぱいです><") ;
という文字列を以下のように変換するプログラムを30秒以内で記述できるか?
unit、nYakuso、=、7、;、unit、nFukuro、[、10、]、;、wstring、strIppai、
(、L、"、持ち物が\nいっぱいです><、"、)、;
0078デフォルトの名無しさん
2007/11/25(日) 17:39:140079デフォルトの名無しさん
2007/11/25(日) 17:43:330080デフォルトの名無しさん
2007/11/25(日) 17:55:10//以下の文字列を無視するのと
クォーテーション文字で囲まれた文字列内で
エスケープ文字を無視するのは標準Boostでは無理。
0081デフォルトの名無しさん
2007/11/25(日) 18:02:1030秒以内は無理そうだが
xpressiveは知らない
0082デフォルトの名無しさん
2007/11/25(日) 18:26:590083デフォルトの名無しさん
2007/11/25(日) 19:04:27だな
0084デフォルトの名無しさん
2007/11/26(月) 05:43:590085デフォルトの名無しさん
2007/11/26(月) 14:51:55swigの方がいいと思った
swigと比べたboost.pythonの利点って何?
0086デフォルトの名無しさん
2007/11/26(月) 17:25:040087デフォルトの名無しさん
2007/11/26(月) 18:27:45double x = 25;
cout << bind(sqrt, _1)(x) << endl;
このコードは、VC++2005では実行できるのですが、
g++ 4.0.0 (boost 1.34) だと以下のように明示的に
キャストしないとコンパイルできません。
cout << bind(static_cast<double (*)double>(sqrt), _1)(x) << endl;
これはg++用boostライブラリ固有の制限なんでしょうか?
0088デフォルトの名無しさん
2007/11/26(月) 18:44:44bindがオーバーロード解決に失敗するときは戻り値の型をテンプレート引数で明示的に指定してやればいいらしいです
0089デフォルトの名無しさん
2007/11/26(月) 18:48:020090デフォルトの名無しさん
2007/11/26(月) 18:49:07もしかしたら、VCにはcmathのfloat版関数の宣言がないのではないか?
■ このスレッドは過去ログ倉庫に格納されています