Boostを語れゴラァ part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/23(土) 15:00:11前スレ
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/
0153デフォルトの名無しさん
2006/10/20(金) 22:03:060154デフォルトの名無しさん
2006/10/20(金) 22:38:40そもそも一時オブジェクトをswapの引数にはできん
0155デフォルトの名無しさん
2006/10/20(金) 23:17:36--->?swap技法?
0156デフォルトの名無しさん
2006/10/21(土) 00:24:570157デフォルトの名無しさん
2006/10/21(土) 00:43:07意味不明
0158デフォルトの名無しさん
2006/10/21(土) 00:43:28vectorが確保するメモリを要素数ぴったりに合わせるテクニックで
x.swap(std::vector<T>(x));
ってのがあったと思うけど、これもダメなの?
0159デフォルトの名無しさん
2006/10/21(土) 00:46:060160デフォルトの名無しさん
2006/10/21(土) 00:50:030161デフォルトの名無しさん
2006/10/21(土) 01:01:03VC++2003で警告レベルを最高にするとwarningになるな。
0162デフォルトの名無しさん
2006/10/21(土) 01:27:5925.2.2 Swapによれば
template<class T> void swap(T& a, T& b);
1 Requires: Type T is Assignable.
とあるから、できないんじゃね?
と思ってx.swap(std::vector<T>(x));とやったらVC++2005でエラーになった。
と思ったらstd::vector<int>(x).swap(x);は通った。
何じゃこりゃ。
0163デフォルトの名無しさん
2006/10/21(土) 02:05:58swap技法はstd::vector<T>(x).swap(x);じゃない?
0164デフォルトの名無しさん
2006/10/21(土) 07:43:54template<class T> void swap(T& a, T& b);
はaもbも非const参照だから、一時オブジェクトを受け付けない。
std::vector<int>(x).swap(x);は、
std::vector<int>(x)が一時オブジェクトだが非constなので、非constなメンバ関数を呼べてしまう。
0165デフォルトの名無しさん
2006/10/21(土) 08:54:42お前何にもわかってないのな
>>159
馬鹿確定
0166デフォルトの名無しさん
2006/10/21(土) 10:01:260167デフォルトの名無しさん
2006/10/21(土) 21:13:06boost::function<int (int,int)> f = add; はコンパイルできるわけですが、
boost::function<boost::function<int,int> (int)> g = add; のようなことがしたい場合はどうし
たらよいでしょうか?addを、int->int->int ではなく int-> (int->int) として扱いたいというか。
gに、あとで(addの)第一引数を渡して、boost::function<int,int>型の関数オブジェクトを得て、
更にその後で(addの)第二引数を渡し、最終結果を得たいという感じです。
0168167
2006/10/21(土) 21:20:16よろしくおながいします
0169デフォルトの名無しさん
2006/10/21(土) 21:44:22どうしてもその変換をしないと駄目?
第一引数が既にあるならそれを部分適用することは簡単なんだが。
0170デフォルトの名無しさん
2006/10/21(土) 22:05:03# include <boost/function.hpp>
# include <boost/lambda/lambda.hpp>
# include <boost/lambda/bind.hpp>
# include <iostream>
# include <functional>
namespace lam = boost::lambda;
int main(void)
{
typedef boost::function<int (int, int)> f_type;
f_type f = std::plus<int>();
boost::function<boost::function<int (int)> (int) >
g = lam::bind(std::bind1st<f_type, int>, f, lam::_1);
std::cout << g(7)(2) << '\n';
}
0172167
2006/10/21(土) 22:23:29ありがとうございます。やってみます。
0173デフォルトの名無しさん
2006/10/21(土) 23:04:050174デフォルトの名無しさん
2006/10/21(土) 23:10:30いってみてよ
0175デフォルトの名無しさん
2006/10/22(日) 01:05:59template <typename A, typename B> int foo(A a, B b) { return 0; }
に対して、後者の関数をbindするつもりで
boost::bind(foo<int,int>, _1, 100);
すると、no matching function for call to ‘bind(<unresolved overloaded function type>, boost::arg<1>&, int)’
とか言われてしまうんだが、これって回避策ありますか?
gcc4.1です
0176デフォルトの名無しさん
2006/10/22(日) 01:12:24boost::bind(static_cast<int (*)(int, int)>(foo), _1, 100)
0177デフォルトの名無しさん
2006/10/22(日) 12:38:25class Void{}Void_v;
template<class T1, class T2, class T3=Void>struct select_f;
の特殊化を作ってfooの引数にVoid型があるなしで選択するとかは。
0178デフォルトの名無しさん
2006/10/22(日) 12:42:09は?
0179デフォルトの名無しさん
2006/10/22(日) 12:43:22175は関数テンプレートな訳だが..
0180177
2006/10/22(日) 13:30:36えーと、あいまいな関数オーバーロードの解決にはキャストあたりが手っ取り早いと思うけど
そこで、
template <typename A, typename B, typename C>
int foo(A a, B b, C c) { return select_f<A, B, C>()(a, b, c); }// put away foo else
・・・
boost::bind(foo<int,int, Void>, _1, 100, Void_v);
こんな感じでキャストを使わない方法の案を提供したかったわけですよ。
0181デフォルトの名無しさん
2006/10/22(日) 13:39:27あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
0182177
2006/10/22(日) 13:55:49キャストを使わない。
キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性をなくせる(たぶん)。
> あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
タイピングの勢いだ。
0183デフォルトの名無しさん
2006/10/22(日) 14:28:28具体例が欲しいな
0184デフォルトの名無しさん
2006/10/22(日) 15:58:190185デフォルトの名無しさん
2006/10/22(日) 16:38:15たとえば、>175を
template <typename A, typename B> int foo(A a, B b); (b)
template<class A, class B>int foo(A*,B*); (c)
こんな(c)を追加して、(c)or(b)のどちらかをbindで使いたい場合
このオーバーロードの解決には結局、関数オブジェクトが手っ取り早いと思います。
0186デフォルトの名無しさん
2006/10/22(日) 17:13:50それ、曖昧か?
後者は foo() についてポインタ型を扱う場合の特殊化を宣言しているので、
引数の型に応じて定義が使い分けられるだけじゃないの?
↓キャストでもコンパイルできたし。
int a, b;
(static_cast<int (*)(int*, int*)>(foo))(&a, &b);
0188デフォルトの名無しさん
2006/10/22(日) 18:02:01boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
これぐらい自分で補完しろよ。
0189デフォルトの名無しさん
2006/10/22(日) 18:35:54コンパイル出来るんだ。へぇー。
0190デフォルトの名無しさん
2006/10/22(日) 19:04:010191デフォルトの名無しさん
2006/10/22(日) 19:23:430192デフォルトの名無しさん
2006/10/22(日) 19:40:14だって食い下がって逆撫でしていれば
>>188みたいな知識ひけらかし大好き君が無償で色々書いてくれるんだもん。
こういう子は利用しない手はないって。
0193デフォルトの名無しさん
2006/10/22(日) 19:57:34普通に質問すればいいのに、なんでわざわざそんな手段をとる必要がある?
0194デフォルトの名無しさん
2006/10/22(日) 20:19:000195デフォルトの名無しさん
2006/10/22(日) 20:25:02>176で終わってる質問だし。
それに>188の知識は>176以上のものではないし。
散々引っ張っといて同じモノしか出ないんじゃ、割に合わない。
単純に悔しくなった>177君が利用してやった振りしてるだけ。
0196デフォルトの名無しさん
2006/10/22(日) 20:47:180197189
2006/10/22(日) 23:35:55ごめん。
だれもつっこんでくれないから寝る前に一言
> boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
ちょっと言い訳・・・・「&a」参照の罠に嵌ってました。以上です。では、おやすみ。
0198デフォルトの名無しさん
2006/10/25(水) 18:14:32すてきな使い心地のライブラリって無いものでしょうか。
0199デフォルトの名無しさん
2006/10/25(水) 19:42:34と
ASLの adobe::forest
が車輪の再発明ぽい点について
0200デフォルトの名無しさん
2006/10/25(水) 20:28:360201デフォルトの名無しさん
2006/10/25(水) 23:26:500202デフォルトの名無しさん
2006/10/26(木) 00:02:53なんて言うライブラリか教えて貰えませんか?
今、std::map を boost::serialization でディスクに書き出しているんですが、
かなりデータ量が大きくなってきて、すべてをオンメモリで処理するのが
苦しくなってきました。
0203デフォルトの名無しさん
2006/10/26(木) 03:11:330204デフォルトの名無しさん
2006/10/26(木) 09:38:05しかし古い設計で組んでいた俺の昔のコードは一体何だったんだと。 orz
0205デフォルトの名無しさん
2006/10/26(木) 11:07:28せめて多項式か2次式だけでもできると
少し数値計算プログラムが楽になる
0206デフォルトの名無しさん
2006/10/26(木) 15:38:08adobe::dictionary_t
はstd::mapよりたくさん要素あつかえるとかtutorialに書いてあった
0207デフォルトの名無しさん
2006/10/26(木) 16:19:02Berkeley DBでも使え。
0208201
2006/10/27(金) 00:43:040209デフォルトの名無しさん
2006/10/27(金) 08:40:10馬鹿?
0210デフォルトの名無しさん
2006/10/27(金) 11:05:09つlibstldb4
0211デフォルトの名無しさん
2006/10/27(金) 16:20:16なぜ boost スレへ?
0212デフォルトの名無しさん
2006/10/27(金) 20:13:30手前で作ればいいのですが、boostにあるならそっちをつかいたく。
0213デフォルトの名無しさん
2006/10/27(金) 20:57:590214デフォルトの名無しさん
2006/10/27(金) 21:06:44それはコンパイルできんだろ..
0215デフォルトの名無しさん
2006/10/27(金) 21:11:33boost::addable< point<T>
, boost::subtractable< point<T>
>
{
MyPlus operator+=(const MyPlus&);
};
でいけたらいいな
0216デフォルトの名無しさん
2006/10/27(金) 21:16:44using namespace boost::lambda;
0217デフォルトの名無しさん
2006/10/27(金) 21:23:350218217
2006/10/27(金) 21:25:480219デフォルトの名無しさん
2006/10/27(金) 21:30:130220デフォルトの名無しさん
2006/10/27(金) 21:38:25複合代入演算子はクラスの外からでも多重定義できるのだから、
boost::lambdaで使えないわけが無い。
0221デフォルトの名無しさん
2006/10/27(金) 21:42:58クラス外から多重定義できるかどうかは関係ないような。
0223デフォルトの名無しさん
2006/10/27(金) 21:52:360224デフォルトの名無しさん
2006/10/27(金) 23:28:35死ねカス
0225デフォルトの名無しさん
2006/10/30(月) 18:40:490226デフォルトの名無しさん
2006/10/30(月) 18:54:49http://opensource.adobe.com/gil/
今レビューされている、Generic Image Library が通れば、
各種画像サポートが実現されるわけで、非常に期待してる。
0227デフォルトの名無しさん
2006/10/30(月) 20:09:510228デフォルトの名無しさん
2006/10/30(月) 22:09:560229デフォルトの名無しさん
2006/10/30(月) 22:14:22ちうこと。
0230デフォルトの名無しさん
2006/10/30(月) 22:29:06http://japan.zdnet.com/news/devsys/story/0,2000056182,20082134,00.htm
ユーザーインターフェイスの自動生成?
本当にできるの?
0231デフォルトの名無しさん
2006/10/30(月) 22:31:59機能の豊富さからいったらvigraが上だろう
http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/
0232デフォルトの名無しさん
2006/10/30(月) 22:42:28作者がboostに提案したか否かだろ
0233デフォルトの名無しさん
2006/10/30(月) 23:51:16発表された頃に斜め読みした限りでは
プログラマとデザイナで仕事を分離するという程度の内容だったような?
0234デフォルトの名無しさん
2006/10/31(火) 01:39:42どの記事だったか忘れたけど
>vigraのほうが好きだけど,vigraは作者が一人だし、gilが採択されたら
>その作者がんばるだろうからいいじゃん
とか書いてあった
0235234
2006/10/31(火) 01:41:27http://lists.boost.org/Archives/boost/2006/10/112316.php
これこれ
0236デフォルトの名無しさん
2006/10/31(火) 03:07:040237デフォルトの名無しさん
2006/10/31(火) 12:11:48VC7.1でコンパイルとおらねえじゃねえかよ
同じとこでこけやがる
0238デフォルトの名無しさん
2006/10/31(火) 18:46:57gcc3.3.6
libstdc++3.3.6
boostでなんとかなりませんか?
wcout << L"てれれのレ";
[****@ **] (沈黙)
0239デフォルトの名無しさん
2006/10/31(火) 18:51:430240デフォルトの名無しさん
2006/10/31(火) 19:18:040241デフォルトの名無しさん
2006/10/31(火) 19:24:22[****@ **]./a.out | od -tx1
0000000 (沈黙)
0242デフォルトの名無しさん
2006/10/31(火) 19:41:44これと同じ問題?
0243デフォルトの名無しさん
2006/10/31(火) 19:52:160244デフォルトの名無しさん
2006/10/31(火) 20:25:510245デフォルトの名無しさん
2006/10/31(火) 20:58:260246デフォルトの名無しさん
2006/10/31(火) 21:14:590247デフォルトの名無しさん
2006/10/31(火) 21:39:46--input-charsetが3.4からだから、そうだと思うんだけど。
0248デフォルトの名無しさん
2006/10/31(火) 21:40:210249デフォルトの名無しさん
2006/10/31(火) 23:02:310250デフォルトの名無しさん
2006/11/01(水) 01:37:53{
return boost::lambda::_1 +x;
}
でxを延命させるうまい方法はありますか? 別途関数を作ってbindとか、
plus<int>()にbindあたりはナシで。
0251デフォルトの名無しさん
2006/11/01(水) 01:48:57延命も何も、λ式に保持されるのはその時点でのxの値で、
xへの参照ではないから、xの寿命を気にする必要はない。
0252デフォルトの名無しさん
2006/11/01(水) 04:26:38結局バージョンの問題か。
■ このスレッドは過去ログ倉庫に格納されています