Boostを語れゴラァ part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/02/07(火) 20:53:54前スレ
BOOSTを語れゴラァ
http://pc8.2ch.net/test/read.cgi/tech/1091198276/
0002デフォルトの名無しさん
2006/02/07(火) 20:54:30Boost 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/
■関連書籍■
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/
0003デフォルトの名無しさん
2006/02/07(火) 20:54:46C++相談室 part46
http://pc8.2ch.net/test/read.cgi/tech/1136690107/
【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
0004デフォルトの名無しさん
2006/02/07(火) 21:00:260005デフォルトの名無しさん
2006/02/07(火) 21:03:570006デフォルトの名無しさん
2006/02/07(火) 21:05:050007デフォルトの名無しさん
2006/02/07(火) 21:23:17Lokiもここでやりましょう。
0008デフォルトの名無しさん
2006/02/07(火) 21:37:52http://sourceforge.net/projects/loki-lib/
JTC1/SC22/WG21 - The C++ Standards Committee
http://www.open-std.org/jtc1/sc22/wg21/
0009デフォルトの名無しさん
2006/02/07(火) 21:45:36賛成
0010デフォルトの名無しさん
2006/02/08(水) 00:30:540011デフォルトの名無しさん
2006/02/08(水) 00:36:05賛成
「Loki とか入れろ」って声があったんだから、命名についての議論はともかく、
せめて「Boost/Loki を語れゴラァ」ぐらいにしとけよ…。>>1 は阿呆かね。
0012デフォルトの名無しさん
2006/02/08(水) 01:01:32そんなこと言い出すんだったら、
「汎用性のあるテンプレートライブラリを語れゴルァ」でいいんじゃないかと。
0013デフォルトの名無しさん
2006/02/08(水) 01:14:020014デフォルトの名無しさん
2006/02/08(水) 01:18:240015デフォルトの名無しさん
2006/02/08(水) 01:19:45じゃ、MFCについて語ろうぜ。
0016デフォルトの名無しさん
2006/02/08(水) 02:37:270017デフォルトの名無しさん
2006/02/08(水) 03:11:090018デフォルトの名無しさん
2006/02/08(水) 04:05:435年前だぞあれ。いまさら何に使うんだと
0019デフォルトの名無しさん
2006/02/08(水) 04:26:450020デフォルトの名無しさん
2006/02/08(水) 08:50:580021デフォルトの名無しさん
2006/02/08(水) 11:24:33だから、前スレでそういう流れになってたのに >>1 がこんな名前で
スレ立てたんだろう。
0022デフォルトの名無しさん
2006/02/08(水) 11:26:480023デフォルトの名無しさん
2006/02/08(水) 13:26:35Boost.MPL.Bind や、Boost.MPL.Iterator、Boost.TypeTraits、Boost.Phoenix2
といった複雑かつ強力なライブラリには劣り、現状でBoost には存在しない
Loki.Singleton や、Loki.SmartPtr も、より強力なものが、Sandbox で開発中だし。
正直、スレタイにLokiはイランだろ
0024デフォルトの名無しさん
2006/02/08(水) 14:43:13インストールがいらない分、regexよりお手軽なのはいいけど。
0025デフォルトの名無しさん
2006/02/08(水) 17:11:12http://pc8.2ch.net/test/read.cgi/tech/1139266461/l50
0026デフォルトの名無しさん
2006/02/08(水) 17:16:460027デフォルトの名無しさん
2006/02/09(木) 05:59:42002827
2006/02/09(木) 22:37:39int a[2][2] = {{0,1},{2,3}};
boost::array<boost::array<int,2>,3> b = {{ {0,1} ,{2,3} }};//2次元以上だと{}が一つ必要ぽ
こんな感じでいけた
002927
2006/02/09(木) 22:38:25だった...orz
0030デフォルトの名無しさん
2006/02/11(土) 18:38:210031デフォルトの名無しさん
2006/02/11(土) 19:19:27ワクテカしているんですが、boost/serialization/ 以下のファイルと
boost/archive/ 以下のファイルって何か関係があるんでしょうか?
とりあえず boost/serialization/string.hpp を include
してみたんですが、boost::serialization::access なんていう
関数は見つからないし。
0032デフォルトの名無しさん
2006/02/11(土) 19:29:27スタック操作が少なくて済むから。
0033デフォルトの名無しさん
2006/02/11(土) 19:35:03ってワーニング出されてもスピード気にしなければ
無視ってしまっておk?
0034デフォルトの名無しさん
2006/02/11(土) 20:01:23IA32に限れば滅多に減らない希ガスるけどな。
0035デフォルトの名無しさん
2006/02/11(土) 20:16:09x86, MMX, XMM各3つまでならレジスタ渡し可能(VC++の場合)
0036デフォルトの名無しさん
2006/02/11(土) 20:29:43どう指定すればそこまで最適化してくれるの?
0037デフォルトの名無しさん
2006/02/11(土) 20:34:06関数に__fastcall付けるだけ。
だがコールと共に寿命が切れる値でもないと、結局スタックに退避する事になる。
0038デフォルトの名無しさん
2006/02/11(土) 20:40:20003958
2006/02/11(土) 20:48:01あげんなボケ。
このスレは永遠に下げ進行なんだよ。
二度とあげんな。ハゲッ
0040デフォルトの名無しさん
2006/02/11(土) 21:46:56オマエモナ
0041デフォルトの名無しさん
2006/02/11(土) 22:10:440042デフォルトの名無しさん
2006/02/12(日) 05:34:51CRCからSHA1 までよりどりみどり、みたいな。
0043デフォルトの名無しさん
2006/02/12(日) 11:30:20。これはどの方式かね?
ttp://www.boost.org/doc/html/hash.html
0044・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/12(日) 12:07:59Crypto++にありそうな気が。
>>43
それはテーブルルックアップ探索用です。リレーショナルデータベースが使ってるやつ。
たとえば文字列なら数文字をパッキングして辞書順になるような数字に変換して検索するだけかと。
0045デフォルトの名無しさん
2006/02/13(月) 20:27:14BOOST_PP_CAT(::, elem)
のようにして::elemと結合させたいのですが、
pasting "::" and "elem" does not give a valid preprocessing token
とエラーが出てしまいます。
ここで、elemはさらに別のマクロに展開されます。
このように、::を含むようなケースで、うまく結合させるにはどうすればいいかご教示ください。
0046デフォルトの名無しさん
2006/02/13(月) 23:54:13まず、 :: elm じゃ何がダメなのかを説明して欲しい。
0047デフォルトの名無しさん
2006/02/14(火) 01:02:29#define GLOBALNAMESPACE( x )\
:: x
とか
0048デフォルトの名無しさん
2006/02/14(火) 03:59:48::直後にホワイトスペースが許されるのは知りませんでした。ありがとうございました。
…という以前に、::elemと続けて書いても展開されました。
難しく考えすぎてたようです(鬱
0049デフォルトの名無しさん
2006/02/16(木) 07:35:300050デフォルトの名無しさん
2006/02/16(木) 08:55:12VS 2005 Pro
0051デフォルトの名無しさん
2006/02/16(木) 09:03:320052デフォルトの名無しさん
2006/02/16(木) 09:18:27っていうか、 >>49 は環境とエラーメッセージを
もっと詳しく書け。もしくは Boots スレに行け。
0053デフォルトの名無しさん
2006/02/16(木) 09:59:030054デフォルトの名無しさん
2006/02/16(木) 10:42:21なんか実行時型情報つかうのって好みじゃなくて。
って、じゃぁ、Boost を使うなよ!って言われそうだが
0055デフォルトの名無しさん
2006/02/16(木) 10:49:35dynamic_cast している個所があって、
これだけのために RTTI を要求しているようなんだが、
そもそもこんなキャストをしないような実装にはできなかったんだろうか。
0056デフォルトの名無しさん
2006/02/16(木) 10:56:00てか
>なんか実行時型情報つかうのって好みじゃなくて。
なんで好みじゃないん?
0057デフォルトの名無しさん
2006/02/16(木) 10:58:30コンパイルが通った時点で保証されている、と信じたいから
0058デフォルトの名無しさん
2006/02/16(木) 11:23:12boost::smart_cast を使わない実装にできそうな気がするから。
気がするだけだけど。
ちなみに、コード眺めてると、
BOOST_SERIALIZATION_BASE_OBJECT_NVP() マクロを
使わなければ、smart_cast も必要なさそうな気がする。
気がするだけだけど。
そんな気がする今日この頃。
0059デフォルトの名無しさん
2006/02/16(木) 12:42:060060デフォルトの名無しさん
2006/02/16(木) 13:17:130061デフォルトの名無しさん
2006/02/16(木) 14:38:490062デフォルトの名無しさん
2006/02/16(木) 14:42:57作れない。
0063デフォルトの名無しさん
2006/02/16(木) 14:43:08仮想関数はメンバテンプレートになれない。
0064デフォルトの名無しさん
2006/02/16(木) 19:29:380065デフォルトの名無しさん
2006/02/16(木) 21:42:52お前みたいなド素人がプログラミングでメシ食っていこうなんて百年早い
マジ死ねよ
0066デフォルトの名無しさん
2006/02/16(木) 21:45:4857の感覚自体はまともだと思うけど
0067デフォルトの名無しさん
2006/02/16(木) 21:47:290068デフォルトの名無しさん
2006/02/16(木) 21:50:14お前も死ねよ。ド素人が
0069デフォルトの名無しさん
2006/02/16(木) 21:56:10何で?
静的型システムってC++の気に入ってる点のひとつなんだけど
0070・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/16(木) 22:21:350071デフォルトの名無しさん
2006/02/16(木) 22:50:34静的型システムで済むわけがないだろ。
そういう文脈で>>57なんて狂気の沙汰としか思えない。
0072デフォルトの名無しさん
2006/02/16(木) 22:59:09シリアライズしたいクラスに対して
friend class boost::serialization::access;
して、さらに
template <class Archive>
void serialize(Archive, const int);
メソッドを実装する必要があるのです
(そうでない場合はシリアライズしたい
クラスメンバをすべて public にする)。
ですので、クラス作者が実際のシリアライズ操作を
実装することが前提なので、その指摘は間違っています。
007357=72
2006/02/16(木) 23:05:57なぜ >>57 のように思ったかというと、dynamic_cast で
基底クラスを派生クラスにダウンキャストするということは、
派生クラスによって異なる振る舞いをさせたいから、
ということであり、そういうことは本来仮想関数で
実現するべきだろう、と思ったからです。
素人とか狂気とか言われる理由が分かりません。
0074デフォルトの名無しさん
2006/02/16(木) 23:39:57標準化のときも結構もめたんじゃないのかな。
禿の意見は確か、
ある言語にある機能がない場合、PGはそれを自作しようとする。
それなら言語仕様に入れたほうが、まだコストがましになるのではないか。
とかC++の設計と進化で言っていた気がする。
0075デフォルトの名無しさん
2006/02/16(木) 23:43:11文法がどんどん変態的になっていくのはその理念のせいか(w
0076デフォルトの名無しさん
2006/02/16(木) 23:46:290078デフォルトの名無しさん
2006/02/17(金) 03:18:10作れないが次のような物はどうだ。
struct Empty{};
template <typename T,typename Base=Empty>
class FooImpl:public Empty{
public:
virtual void foo1(Foo1 & arg){
(T *)this->bar(arg);
}
virtual void foo2(Foo2 & arg){
(T *)this->bar(arg);
}
};
class Bar:public FooImpl<Bar>{
template <typename T>
void bar(T * arg){
//...
}
}
一応テンプレート関数のような動作をする(受け取れる型などに制限ができるが)関数が作れる。
個人的にはテンプレートの動作速度や型が余分な型変換を削ったりできる場合もあると思うし(doubleとfloat用の仮想関数を2つ作ったりしても1つの記述ですむとか)
使い道事態はあるかな・・・と。
0079デフォルトの名無しさん
2006/02/18(土) 14:33:14え?お前コレ何の役に立つと思ってんの?
class Goo:public FooImpl<Goo>{template <typename T>void bar(T * arg){}}
他にこのようなGooクラスを作るとする。
スーパークラスは、それぞれFooImpl<Bar> と FooImpl<Goo>で、
同じスーパークラスじゃないから、これらを同一的に扱えない。
じゃあ、Barから派生するか?
class Too:public Bar{template <typename T>void bar(T * arg){}}
これで、FooImpl<Bar>*として同一的に扱える。
しかし、Too::barは呼ばれず、Bar::barが呼ばれる。
お前の案は糞の役にも立たない。使い道自体も当然無い。
もうちょっと頭使えよ。
0080デフォルトの名無しさん
2006/02/18(土) 19:22:21ではこのように訂正
struct Base{
virtual void foo1(Foo1 & arg)=0;
virtual void foo2(Foo2 & arg)=0;
};
template <typename T,typename Base_=Base>
class FooImpl:public Base_{
public:
typedef Base_ Base;
void foo1(Foo1 & arg){
(T *)this->bar(ar);g
}
void foo2(Foo2 & arg){
(T *)this->bar(arg);
}
};
class Bar:public FooImpl<Bar>{
template <typename T>
void bar(T * arg){
//...
}
}
008178
2006/02/18(土) 19:49:34struct Base{
virtual int funcint(int arg)=0;
};
template <typename T,typename Base_=Base>
struct BaseImpl:public Base_{
int funcint(int arg){
return (T *)this->func(arg);
}
};
次のように変更するとする
class Base{
virtual int funcint(int arg)=0;
virtual BigInteger funcBigInteger(BigInteger arg)=0;
};
template <typename T,typename Base_=Base>
struct BaseImpl:public Base_{
int funcint(int arg){
return (T *)this->func(arg);
}
BigInteger funcint(BigInteger arg){
return (T *)this->func(arg);
}
};
さて、この両方の仮想関数はほとんど同じような動作をする。
こういうときに両方の型に対してコードが生成されるため、
コードをBigInteger用に増やさなくてもヘッダーファイルに手を加えるだけでBigInteger用の実装が簡単に作れるようになる。
そして、この仕組みを入れたとしても実行時の速度に全く悪影響を与えない(コンパイル時間は別だが)
速度と汎用性のトレードオフでどうするべきか判断付かない時に入れるといざというときに役に立つと考えているし。
汎用性を最初から優先する場合でも速度に配慮する場合に役に立つだろう。
0082デフォルトの名無しさん
2006/02/18(土) 23:55:540083デフォルトの名無しさん
2006/02/19(日) 08:36:420084デフォルトの名無しさん
2006/02/19(日) 08:40:300085デフォルトの名無しさん
2006/02/19(日) 15:04:050086デフォルトの名無しさん
2006/02/19(日) 15:34:32おまえらの脳ミソがへんなんだよ。
どのように見ても、>>81のソースは仮想テンプレート関数にはなってないだろ。
これなら、SFINAE使う方向で考えたほうがましなのを作れるぞ。
0087デフォルトの名無しさん
2006/02/20(月) 03:24:54どのように見たの?
0088デフォルトの名無しさん
2006/02/20(月) 10:27:32( ) ||_| ←こんな感じ
(__ つ三_ |
/__ヽ) || ||
_||_J || ||
0089デフォルトの名無しさん
2006/02/20(月) 12:06:13変態的だけど。
-m {1|2|3} みたいな感じで動作モードを指定する
パラメータを処理したいときって、内部的には
enum にしててもやっぱコマンドラインでは整数で
与えるしかないのかな?なんかもっとスマートな方法内?
0090デフォルトの名無しさん
2006/02/22(水) 17:14:27の意味がようわからんのでなんとも。
自前でパースすればどうだってできるとしか。
0091デフォルトの名無しさん
2006/02/23(木) 23:57:05コールバック書かなくて済むからいいね。
0092デフォルトの名無しさん
2006/02/27(月) 01:58:44boost regexのサンプルgrep.cppのコンパイル方法がわかりません!
Vine Linux 3.2 の g++でコンパイルしています!
0093デフォルトの名無しさん
2006/02/27(月) 03:08:44ソース見てみるとsignalはnoncopyable継承してるみたいだから、
vectorで要素確保するときにコンストラクタ起動できなくてエラーが起こるみたいだけど。
ちなみにboost::arrayに突っ込む分には問題なかったっす。
環境:VC2005 + boost 1.33.1
0094デフォルトの名無しさん
2006/02/27(月) 03:14:540095デフォルトの名無しさん
2006/02/27(月) 17:40:23signalをboost::functionへ突っ込んだらどう?
0096デフォルトの名無しさん
2006/02/28(火) 11:24:520097デフォルトの名無しさん
2006/02/28(火) 12:17:120098HelpME
2006/02/28(火) 15:59:15Boostってユニバーサルバイナリに出来るんでしょうかね?
BoostのライブラリってBoostJamっていう専用の
ライブラリビルドツールを使ってビルドするので
自分でMakeファイル作ってビルドって出来ませんよね。
PowerPC用、intel用にそれぞれ
BoostJamで吐き出されたBoostライブラリ群を
lipoコマンドでマージするしかないっすかね?
たすけて〜〜〜〜!
0099デフォルトの名無しさん
2006/02/28(火) 21:03:00bjamは内部でgccとかを呼び出してるだけ。
自分で適切なMakefile書けばコンパイルできないこともない。
0100デフォルトの名無しさん
2006/02/28(火) 22:35:270101・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/28(火) 22:50:29■ このスレッドは過去ログ倉庫に格納されています