2 :
デフォルトの名無しさん :02/10/06 00:18
2getのチャンス到来?
キタ━━━(゚∀゚)━━━!!
6 :
デフォルトの名無しさん :02/10/06 01:14
仕事で使ってる?
使うより読むほうが面白い罠
9 :
デフォルトの名無しさん :02/10/06 02:02
準標準ライブラリとか言われるとSTLに対する2軍ってイメージが。
「事実上の標準ライブラリ」や「最もよく利用されているライブラリの一つ」の方がよかったかね
11 :
デフォルトの名無しさん :02/10/06 03:13
3.2だったら大丈夫でした。自分のマシンが遅すぎただけたった・・・
shared_ptr しか使ってないのですが こんなわたしも boost 使いですか?
>>14 業界標準のスマートポインタとしてboost::shared_ptrを使う意義は大きいんじゃ?
下手な独自開発のスマートポインタを公開して得意げな連中に比べれば。
げほ、sageミスった
17 :
デフォルトの名無しさん :02/10/06 06:27
正規表現の部分のみ使わせてもらっているけど、 なかなかいいんぢゃない。
18 :
デフォルトの名無しさん :02/10/06 06:29
わしはモレーツに boost が好きだ。
日本語のboost解説書が出る予定は無いのでしょうか。 STL本は山のように出ているんだから、一冊くらい出してくれても良いのに。
boostプログラミングのためには最速のPCが必要。
ghcで遊んでて「遅いなあ」とか思ってたけど、
そのはるか上を逝く。当たり前だけど。。
>>20 ネットの情報とソースコード、これで十分でしょ。
出たとしても売れないよ(藁
22 :
STL刷れ466 :02/10/06 19:04
STLスレでVC++6のバグ回避法について伺ったモノです。
http://pc3.2ch.net/test/read.cgi/tech/1026793823/466-469n もうひとつ教えていただきたい事が・・。
class Foo { public: void bar(int i); }; があるとき、
std::mem_fun1_t< void, Foo, int > f( &Foo::bar ); が
やはりVC6でコンパイルできません。例によって戻りがvoidでなければ
とおります。
この問題をboostで回避することはできないでしょうか?
教えてください。
>>22 うぐ、もしかしてboost::mem_fun1_t でOKですか?
手元にいまVCがないんですが・・。
>>22 mem_fun1_t は 参照の参照問題の回避以外はSTLと
確か変わらんので無理だと思った。かわりにmem_fnの
返値構造体を持てばいいのだろうが、実装依存らしいので
これもやめたほうがいいだろう。
…ということで汎用のファンクタにしてしまえ。
boost::function2<void, Foo*, int> f( boost::mem_fn(&Foo::bar) );
GHCより遅いんかい……
26 :
デフォルトの名無しさん :02/10/06 23:22
>>24 できました。ありがとーございます。
現在、boost::bindがVCでコンパイルエラーになるってので格闘中。
いや本当はbind1stで事足りるんですけどね。
おれもれも
29 :
デフォルトの名無しさん :02/10/07 01:03
gcc3.2を使うと、 "Unknown compiler version - please run the configure tests and report the results" というエラーが出てコンパイルできない場合があるのですが、やはりgcc3.1以前を 使わないといけないのでしょうか。
30 :
デフォルトの名無しさん :02/10/07 01:04
tokenizerで質問です ウィンドウズアプリケーションで、WinMainの引数から コマンドラインが渡されていたら、それをstd::setにinsertする処理をしたいんです そこで std::set<std::string> CmdLine; if (*lpCmdLine != NULL) { std::string CmdLineStr(lpCmdLine); boost::tokenizer<> CmdLineTemp(CmdLineStr); for (boost::tokenizer<>::iterator it = CmdLineTemp.begin(); it != CmdLineTemp.end(); ++it) { CmdLine.insert(*it); } } とやってみたのですが、「-a -bc&d」というコマンドラインを渡すと 「a」「bc」「d」に分解してくれちゃいやがります 確かデフォルトの分割は空白でされると聞いたのですが、どうも嘘だったようで・・・ 本当は「-a」「-bc&d」にしたいのですが、どうしたらいいんでしょうか?
あ、ちなみに if (*lpCmdLine != NULL) { std::string CmdLineTemp(lpCmdLine); std::size_t breakpoint = 0; // テンポラリが空になる(区切りの空白が見つからなくなる)まで繰り返す while (breakpoint != std::string::npos) { // 空白までを1単位として、メンバへ格納して、その分を削除する breakpoint = CmdLineTemp.find(' '); CmdLine.insert(CmdLineTemp.substr(0, breakpoint)); CmdLineTemp.erase(0, (breakpoint + 1)); } } というコードだと何も問題ありませんでした
あるクラスHogeが保持しているvector<Moga>をソートするのに、 Hoge::sortが Cmp cmpfn を受けとる必要があるんですが、 template < typename Cmp > void Hoge::sort( Cmp cmpfn ); と typedef boost::function< bool, const Moga*, const Moga* > Cmp; void Hoge::sort( Cmp cmpfn ); のどちらがより適切でしょうか?
あ、typedef展開して書くの忘れた。そのへんは見なかったことにしてく ださい..
>>32 実は前者で書いていたんですが、boost::mem_fn( &Hoge::sort<> )
するとg++(2.93)がinternal compiler errorで御臨終する罠に落ちまして。後者のような書き方ってアリなのかなぁと思ったのです。
あまりSTL,boostともに理解できていないのですが。。
36 :
デフォルトの名無しさん :02/10/07 02:08
>>32 に便乗させてください
そもそも自作のクラスが32でいうところのcmpfnを
メンバ変数に保持しなければならないときその型は
何にするのがいいの?そのクラスをクラステンプレート
にしてもいいんでしょうけどインスタンス化が面倒な
予感
何か考え違いをしているのかなぁ。
>>36 STLスレのほうがいいんじゃない?
# ...読んでいる人がまったく同じだったりする罠
# ちなみに漏れは回答わからず(鬱
38 :
デフォルトの名無しさん :02/10/07 02:29
Boost入れたけどなんかエラーばっかりだ・・・・鬱 試しにヘッダインクルードしただけなのに VC++6.0 エラー73個 Bcc5.5 内部の致命的エラー2個
39 :
デフォルトの名無しさん :02/10/07 05:47
boost::graphの使い方解説してるサイトとかない?
>>30 あー本当だ。デフォルトだと ispunct/isspace で切るみたいだね。
typedef boost::tokenizer<boost::char_separator<char> > SpaceTokenizer;
boost::char_separator<char> sep(" ");
SpaceTokenizer CmdLineTemp(CmdLineStr, sep);
for (SpaceTokenizer::iterator ...
くらいでどうよ?
>>36 そのcmpfnがクラスの性質にとって重要な一部分なら、
例えば std::set みたいにテンプレート化すべきな気がする。
その場合は set< char, less<char> > と set< char, greater<char> >
が別の型であるべきだと思うので。
そうでもないなら、
例えば class WindowManager が各Window用のコールバック関数を
保持する…みたいな場合なら、必要に応じて適当に
関数ポインタなり boost::function なり loki::Functor なりで。
なるほど..勉強になります。
>>42 >関数ポインタなり boost::function なり loki::Functor なりで。
この、"関数ポインタで受ける" という方法が、具体的にどうなるのか
思いつかないのですが、ちょっと教えて頂けませんか?
>>41 にはHello, World的なことしか書いてないので、
使い込むなら別の資料が欲しいところ。しかし英語で探しても
boost本家とBGL本しかちゃんとしたものが見つからん…。
ソース読めばいいんじゃないの?
>42 なるほど、char_separator<>なるものが存在したのですか・・・ ざっと解説サイト回っただけだとオフセットセパレータの話ばっかりだったので キーワードを教えてもらえただけで大変助かりました どうもありがとう
48 :
デフォルトの名無しさん :02/10/07 09:54
>>46 graphはregex++以上にソース読むのつらい。
yacc&lexも使ってるし。
>>29 自分はそのチェックをはずして 3.2 で使ってる。
といっても、スマートポインタくらいしか使ってないけど。
50 :
デフォルトの名無しさん :02/10/07 11:26
試す度胸が無いので恥を忍んで聞きますが 文字列へのポインタconst char* lpstrを boost::lexical_cast<string>(lpstr)とやると ポインタそのものの数値が文字列化されてしまうんでしょうか? 数値なら文字列にして、文字列ならそのままにして ファイルへ保存するクラスを作っているんですが なんとかテンプレート化できないものか悩んでおりまする・・・
>>50 いやいや、そんなわけないよ。ちゃんとCの文字列型→stringへの変換が行われます。
boost::lexical_cast<string>(static_cast<void*>(lpstr))とやれば別だけど。
ていうかそのくらい試してみればいいのに。
あれれ・・・試しにやってみたらアブノーマルなプログラムだ!って怒られて強制終了・・・ map< string, map< string, string > > IniMap; に template <typename value_type> inline void SetIni(const char* section, const char* key, const value_type& value) { IniMap[section][key] = boost::lexical_cast<std::string>(value); } とやってみたんですが、数値なら上手くいくのにconst char*が渡ると怒られます もしかしてlexical_castの問題じゃなくて、テンプレートに対する理解が足りないとかいう話でしょうか・・・ 環境はBCC5.5.1+BCC添付のSTL+BOOST1.28
53 :
デフォルトの名無しさん :02/10/07 18:58
>>52 文字列に空白が含まれていませんか?
空白が含まれている場合、
operator>>は空白までで区切ってしまうので
全部出力されません。
そのため、bad_lexical_castが投げられてしまいます。
自分の出した解決策はconst char *の時や
string型の時の特殊化(オーバーロード?)を作るです。
うまいことやればうまくいきます。
54 :
デフォルトの名無しさん :02/10/07 19:12
ちなみにloxical_castは一度、 operator<<を介して文字列スとリームに変換されてから Targetの方にoperator>>を介して変換されています。
>>53 空白は含まれていません
型毎に特殊化するって、boost::type_traitsを使う方法でしょうか?
もしそうだとして、type_traitsって実行時に型特性を判断できるんですか?
>>55 いえ、そうではありません。
単純に
template <typename value_type>
inline void SetIni(const char* section, const char* key, const value_type& value) {
IniMap[section][key] = boost::lexical_cast<std::string>(value);
}
inline void SetIni(const char* section, const char* key, const char* value) {
IniMap[section][key] = value;
}
inline void SetIni(const char* section, const char* key,const std::string &value) {
IniMap[section][key] = value;
}
をそれぞれ用意するだけです。最後の引数を変えたものを用意して
文字列だったらloxical_castを使わずそのまま代入するということです。
それと、loxical_castにconst char *のNULLを渡しても落ちました。
その線はないでしょうか?
>>56 なるほど、と、いうことは
型が明示されている関数が宣言されていた場合、
どの型にも当てはまらなかった場合にテンプレートが使われる
という認識で良いんでしょうか?
boostとは関係無い話題ですけど・・・
>>56 lexical、な。
>>52 同じ環境でやってみて
#include <map>
#include <string>
#include <boost/lexical_cast.hpp>
using namespace std;
map< string, map< string, string > > IniMap;
template <typename value_type>
inline void SetIni(const char* section, const char* key, const value_type& value) {
IniMap[section][key] = boost::lexical_cast<std::string>(value);
}
int main()
{
// SetIni( "hello", "world", 3 ); // safe
SetIni( "hello", "world", "hoge" ); // safe
// SetIni( "hello", "world", "hoge huga" ); // abnormal termination
// SetIni( "hello", "world", (const char*)NULL ); // abnormal termination
}
ってな感じでうまく実行できたけど。念のためもう一度
空白かNULLポインタを疑ってちぇっくした方がいいと思われ。
>>32 です。boost::bindについても教えていただきたいことがありまして・・。
次のコードがコンパイルできません。
#include <vector>
#include <algorithm>
#include <boost/bind.hpp>
class B { // abstract
public: virtual void foo(void) = 0;
};
class D : public B { // concrete
public: virtual void foo(void) {}
};
void func(int x, B& y) {}
int main(void) {
std::vector<int> vi;
B* d = new D;
std::for_each( vi.begin(), vi.end(),
boost::bind(func, _1, (*d))); // *d がまずいらしい
return 0;
}
g++ 3.2 を使っているんですが、 boost/bind.hpp:211: could not convert ` (+a)->boost::_bi::list1<A1>::operator[](const boost::_bi::value<T>&) const [with T = B, A1 = int&]((this + 4))' to `B&' となってしまいます。どうにかする方法はないでしょうか・・。 神々の皆さん教えてください。
あーーーーー boost::ref がないだけじゃん・・・・ お騒がせしました。 boost::ref(*d) でつね。
62 :
デフォルトの名無しさん :02/10/08 11:19
VC6でboostとSTLPort使ってるとき、_STLP_DEBUG を 1 にするとコンパイルできない。鬱。
次からはC++相談室一つにまとめねえ? boost,geenric,STL,C++相談室 こんなにいくつもいらないよ。 それにC++プログラマで今時テンプレートを 使えないやつの方がヤバイ。 そういうやつはソースも読まずにSTLを 使ってたりするから信用ならん。 boostはもうここまで来たら避けては 通れないっしょ。 Lokiにしたってある程度使ってると 大体慣れてくる(ような気がする)。 という訳で出来ればC++相談室に一本化する ようなほうにいってくれるとうれしいな。 v(^・^)v
そうだね。
65 :
デフォルトの名無しさん :02/10/08 14:14
次からって・・・ このスレはC++スレとSTLスレの総意でついこのあいだ独立したばっかりだと思うが・・・ 一本化するなら、C++相談室スレッドとC++(準)標準ライブラリスレッドくらいには分けて欲しい
66 :
デフォルトの名無しさん :02/10/08 14:16
class TEST{ private: int a, b; public: int AddA(int v, const TEST &test){return v + test.a;} int AddB(int v, const TEST &test){return v + test.b;} }; vector<TEST>tests; intalla= accumulate(tests.begin(), tests.end(), 0, boost::bind(&S_FileInfo::AddA, _1, _2))); intallb= accumulate(tests.begin(), tests.end(), 0, boost::bind(&S_FileInfo::AddB, _1, _2))); みたいなことをしたいのですが、 boost::bind あたりの使い方がよくわからずコンパイルエラーが起きてしまいます。 どうすればいいでしょうか?
>>65 同意。STL/Boost/Genericスレはノイズが少なくて良い。
>>65 禿堂。
もう関連スレが細分化されすぎて見づらい。
>>63 >今時テンプレートを使えないやつの方がヤバイ
まぁまぁ。気持ちは分からなくもないが人それぞれ、
ソースそれぞれってことで。
>>66 あまり自信ないですが、
>>boost::bind(&S_FileInfo::AddA, _1, _2);
は、
boost::bind( &func , TEST instance, _1, _2 );
では?
そして、この返り血は op( int , TEST & ) なので、accumulateの
関数にはならないかと思うんですが。
70 :
デフォルトの名無しさん :02/10/08 17:10
>>69 op( int , TEST & ) なので、accumulateの 関数にはならない
はうそでした。申し訳ない・・・
>>int AddA(int v, const TEST &test){return v + test.a;}
thisはいずこに?
class TEST
{
int AddB(int &v){return v +b;}
}
void sum(TEST &x, int &v )
{
x.AddA(v);
}
std::for_each( tests.begin(), tests.end(), boost::bind( addop,_1,boost::ref(b) ) );
とかなら分かるけど・・
>>66 やりたいことがさっぱりわからんが、適当に見当つけるとこういうことか?
class TEST{
private:
int a, b;
public:
int AddA(int v){return v + a;}
int AddB(int v){return v + b;}
};
vector<TEST> tests;
int alla= accumulate(tests.begin(), tests.end(), 0, boost::bind(&TEST::AddA, _2, _1));
int allb= accumulate(tests.begin(), tests.end(), 0, boost::bind(&TEST::AddB, _2, _1));
>>69 , 70
せっかくコードを提示していただきましたが、
自分の能力不足か、理解できないです。
スミマセン。
>>71 なぞのサンプルから推測していただきありがとうゴザイマス。
提示していただいたコードでコンパイル通りました。
boost::bind の理解不足でした。
ありがとうございました。
>>63 ソウデモナイヨ。(周囲見てると)
書いてて鬱なのでsage。
74 :
デフォルトの名無しさん :02/10/10 01:21
boostでできるかどうか良くわかってないんですが、すべてのメンバがpublicな、 (C言語のそれと同等の)structがあるとき、その全てのメンバをprivateにした上 でsetter/getterをなるべく自動的に作成するような、上手い方法はありませんか?
全てのメンバを、自動生成したsetter/getter通すって、 publicにあるのといっしょじゃないの?
76 :
デフォルトの名無しさん :02/10/10 01:42
>>75 できれば全部virtualだと嬉しかったりします。
あなたの人生が実はvirtualです。
マトリーックス!
あなたの人生が実は mutable です。
よーしパパ ジェネレイティブに書いちゃうぞーとか言ってんの。もう見てらんない。
実を言うと私の心はconstなんです。
>>81 まぁ、iteratorでforループまわす真似を何があっても絶対しないばか
りか同僚のそういうコードを片っ端から書き直してみたりとか、それ
でいてindirect_iteratorは使いまくってみたりとかしてたらブチ
キレる人もいるわな(わら
generativeなコード書いてブチキレられてる人は、自分を含めまだ 知らないってことで失礼。 はやくブチ切れられるようになりたーい。
>>74 真面目な話、
親クラスのメンバをQUERYする
方法がないから、そう簡単な方法は
ないと思われ。
>>83 汎用厨は反省汁!!
・・・・・・オレモナー
3日くらいろくに寝ないでboostしてたら、いつのまにかboost::function,bind,mem_fn を使いこなし、成り行きで(苦笑) templateのpartial specializationをしている自分 がいて、いまちょっと感動してる。。3日前はstd::bind1stもよくわからなかったのに。 このスレにお世話になることがあったらよろしくおねがいします。
・・・早速なんですが、VisualC++6(SP5)で、次がエラーになってしまいます。 typedef boost::tuple<int> hoge; tuple_test_VC6.cpp(63) : warning C4091: 空白の宣言が見つかりました。 tuple_test_VC6.cpp(63) : error C2143: 構文エラー : ';' が '<' の前に必要です。 tuple_test_VC6.cpp(63) : error C2059: 構文エラー : '<' g++だと問題なかったのですが、VCで通す方法はありませんか? ご存知の方、ご教授ください。
>>90 まことにすんません。嬉しかったものでつい。
92 :
デフォルトの名無しさん :02/10/10 06:45
I see dead people (((;゚Д゚)))
>93 ありそ。
95 :
デフォルトの名無しさん :02/10/11 00:31
誰か、Effective Boostを書いてくれ。
Effective Boost
正直、本が出ないことには仕事で使いづらいな。
一般的には、自分は使えるけどまわりが・・という状況だね。 おれもれも。
99 :
デフォルトの名無しさん :02/10/11 07:02
boost::mem_fn について教えてください。
http://www.boost.org/libs/bind/mem_fn.html によると、
It supports member function pointers with more than one argument らしいんですが、
2つ以上の引数をとるメンバ関数ポインタをmem_fnに渡して嬉しいケースって何かありますか?
そうして得られたfunction objectはbind1st/2ndで扱えないと思いますので、それなら
mem_fnなんて使わないでboost::bindだけ使っていれば良い気がしてなりません。
100 :
デフォルトの名無しさん :02/10/11 09:20
99+1
101 :
デフォルトの名無しさん :02/10/12 09:54
1.29 公開されました。
ひとまずmplのデバッグが完了したということにして いいのですね?
103 :
デフォルトの名無しさん :02/10/12 13:00
boostのthreadってLokiのやつと比べるとダサクネ? Cのインターフェイスをラップしただけのものなんて 正直入れないで欲しいな。
104 :
デフォルトの名無しさん :02/10/13 01:52
2chのみんなー、mplをもっと流行らせよう!!! こいつはすごい プライベートでも仕事でもメタメタProgramminging
105 :
デフォルトの名無しさん :02/10/13 06:25
お、boost::format 入ったか。うれしいな。
ぬうおおおおお!更新キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
>>99 template<class Ite1, class Ite2, class Ite3, class Func>
for_each_3( Ite1 a, Ite1 end, Ite2 b, Ite3 c, Func f )
{
while( a != end ) f(*a,*b,*c), ++a, ++b, ++c;
}
とかやりたい時…って普通やりたくないか、そうか。うむ。
うん、、ない・・・・・・
110 :
デフォルトの名無しさん :02/10/13 14:51
Cygwin用のBoost.Jam executable(bjam.exe.gz)をダウンロードして gunzip bjam.exe.gzで解凍しようとしたら gunzip: bjam.exe.gz: not in gzip format とのエラーになる。 どうやって解凍すればいいの?
>>110 bjam.exe.gz: MS Windows PE Intel 80386 console executable not relocatable
って言われるから、単に拡張子が間違っているじゃねーのか ?
とりあえず、bjam.exe にリネームして、ウィルスチェックしてから実行すればいいと思う。
(なんかあっても、責任は取れないけど...。)
boostの前にセットアップでつまずく罠 jamっての辞めてほしいんすけど。
>>111 mv bjam.exe.gz bjam.exe
./bjam.exe
としてみたら
bash: ./bjam.exe: Permission denied
boostが嫌いになりそうだ...
$chmod 755 bjam はしてますか?
ls -lで見て -rwxr-xr-x となっています (chmodする前から)
>>113 chmodじゃないの?ていうか、それくらい(略
>>112 そだね。漏れもmakeにしてほすぃ、と思う。
けど、boostのソースん中にjamのソースは入ってるから、バイナリだけ作って、
boost入れたら消せばいい。バイナリ自体も配付されてるしな。
>>110 IEで落とすと、IEが落としながら勝手に解凍したりしつつ
拡張子はそのまんまという迷惑なことをやってくれるが、
そういうことでなくて?
debパッケージ待ちだな、こりゃ。
119 :
デフォルトの名無しさん :02/10/13 17:50
shared_ptrってスレッド越しに渡してもちゃんと参照カウントされますか? もしくはちゃんと参照カウントさせて別スレッドに渡す方法ってありますか? 例えばPostThreadMessageとかで
マルチスレッドオプション付きでコンパイルすれば ちゃんとMutex入りとかになったはず、確か。
Cygwin用のbjamじゃなくてWindows用のbjamをダウンロード(こちらはzip) してCygwin上で実行したらうまくいった。 出来上がったライブラリの拡張子がlibになってしまうのでaに変えたが、 それ以外は(今のところ)問題なし。 お騒がせしました。
bjamでビルドすると、STLportを使ってくれません。 makeだとちゃんとSTLportを使ってくれるんですが。
つД`) ウエーン
>>122 コンパイラによるので何とも言えんが、ちゃんと
-sTOOLS=gcc-stlport
とか
-sTOOLS=msvc-stlport
とかやってるか?
>>124 はい、msvc-stlportを指定してビルドしてみましたが、使ってくれませんでした。
コンパイラはVC7です。
せめて正規表現部分だけでも標準化されないかなとかいってみるテスト
128 :
デフォルトの名無しさん :02/10/15 22:59
VC6に 1.29.0(の少なくともcast.hpp)を入れると using namespace boost; しなくても、min( a, b ); が 多重定義でコンパイルエラーになるのは俺だけでしょうか。 とりあえず、std::min( a, b ); にして凌いだけど、、、 なんで、グローバル名前空間にminが見えるわけ? 今後 min はstdを明示的に指定しないと使えない? マイクロソフトみたいな真似はやめれ!
>>128 インクルードしないようにすればいいじゃなくて?
>>129 いや、試したけど大体何インクルードしてもエラーになる。
あと、多重定義ってのは嘘で、オーバーロードの曖昧さでした。
ライブラリのバージョン上げた途端コンパイル通らなくなって
カナーリビビッタヨ
>>128 うちだと VC6SP5 + boost 1.29.0 (STLは標準のもの) で
#include <algorithm>
#include <boost/cast.hpp>
using namespace std;
//using namespace boost;
int main()
{
return min(1,2);
}
using namespace boostしてもしなくても、何の問題もなく通ったけど。
<windows.h> のminのせいとかいうオチは流石にないよな?
>>131 もしかしてSTLPortのせい?
#include <algorithm>
#include <boost/cast.hpp>
using namespace std;
int main()
{
return min( 1, 2 );
}
error C2667 〜
error C2668 〜
なんだけど、確かにSTLPort下げると通る!
46じゃなくて、
>>43 の解説希望、でした・・・・.....
136 :
デフォルトの名無しさん :02/10/18 03:17
windows.h #define min(x,y) (x<y?x:y) マイクロソフトは最高最強のソフトメーカーです
WTLだけ相手にしましょうや。
139 :
デフォルトの名無しさん :02/10/18 05:16
>>138 いやわかりますが・・
関数ポインタに boost::bind とかで作った関数オブジェクトを代入できるんですか?
>>139 できないよ?だから42氏が、必要に応じて
関数ポインタを使うなりboost::functionを使うなり適切な物を、
とゆーとるのではないだろうのか。
namespace windows{ #include "windows.h" } (ry ヽ(`Д´)ノもう来ねえよ!ウワァァン!!!
>>145 激しくワラタ。
>>147 #include <windows.h>
#undef min
// 自分用minの定義
149 :
デフォルトの名無しさん :02/10/19 12:21
#define min(l,r) !max(l,r) 動きません。助けてください。
そらそーだろ
151 :
デフォルトの名無しさん :02/10/19 12:27
うわ、凄いマヌケなことしてる気がしてきました。 なにか間違ってます?
152 :
デフォルトの名無しさん :02/10/19 12:29
#define min(l,r) max(!(l),!(r)) こうだったかな?
! についてもうちょっと研究するんだな
boostスレがネタスレになってる 俺のせい?
>>148 #define NOMINMAX
#include <windows.h>
#include <algorithm>
>>149 マクロはやめれ
プリプロセッサで変態的プログラミングを行うスレはここですか? boost::preprocessorでどうぞ。 #define PRED(D,STATE) BOOST_PP_LESS_D(D,(STATE),1001) #define OP(D,STATE) (BOOST_PP_INC(Abone(STATE))) static int Abone(int res){ std::cout << res << " あぼーん\n"; return res; } int main(){ BOOST_PP_WHILE(PRED,OP,1); std::cout << std::endl; return 0; }
ん?BOOST_PP_INCって定数しか扱えない罠?
160 :
デフォルトの名無しさん :02/10/19 22:57
>>154 うむ、これはおまいのせいなので、ここは罪滅ぼしにSTLPort+boostの
どの辺がマズかったのか調べて報告してくれると嬉しいなっと。
boost/config/platform/win32.hpp にある #ifdef BOOST_MSVC namespace std{ // Apparently, something in the Microsoft libraries requires the "long" // overload, because it calls the min/max functions with arguments of // slightly different type. (If this proves to be incorrect, this // whole "BOOST_MSVC" section can be removed.) inline long min(long __a, long __b) { return __b < __a ? __b : __a; } inline long max(long __a, long __b) { return __a < __b ? __b : __a; } // The "long double" overload is required, otherwise user code calling // min/max for floating-point numbers will use the "long" overload. // (SourceForge bug #495495) inline long double min(long double __a, long double __b) { return __b < __a ? __b : __a; } inline long double max(long double __a, long double __b) { return __a < __b ? __b : __a; } } using std::min; using std::max; # endif 上でやってるminマクロのundefとかは良いとして、一番下の一体何?
>>161 の追記
とりあえず、対策は
boost/config/stdlib/stlport.hpp に
#undef BOOST_MSVC // min, max バグ修正
とか入れとけばOKみたい
バグっぽいので、次期バージョンでは修正されているでしょ
連続カキコスマン
>>162 は嘘だ、BOOST_MSVCは他のとこでも使われてる!
#define BOOST_STLPORT_MSVC とか定義して
>>161 のとこだけ外してくれ
AppleのUniversal HeadersはちゃんとC++対応してるのになー Microsoftも見習ってほしい
>>155 サンクス、勉強んなった。
ところで、windows.hって…VCなんだよね…。
>>165 偉大なるビル大師に命を賭して忠誠を誓う際に使います(w
BCは…使ったことないのでスマソ…
167 :
デフォルトの名無しさん :02/10/23 21:32
最新版のboostでも、VCでindirect_iteratorは使えないんでしょうか? 不便でしょうがない・・。
168 :
デフォルトの名無しさん :02/10/24 00:26
boost を VC6-STLport でコンパイルしてたら 「コンパイラのヒープが足りない」 とか言って Stop しますた。 メイクファイルいぢって /Zm200 オプションつけて動かしたらコンパイル通ったけど、 これで OK なの?
GentooLinuxにboostが入りました。1.28と1.29です。 これであの変なjamとかいうのを覚えなくて済みます
誰もレスしないので…
>>169 漏れも同じ環境だけど出なかったよ。
> 「コンパイラのヒープが足りない」
ヒープかよ…なんだろ?
とりあえず…メモリは十分?
>>171 レスありがと。
致命的なエラー C1076 だそうで。
PV-800MHz、Mem-933MB、Windows 98SE、VC6SP5、STLport-4.5.3、boost-1.29.0。
169 の通り一応コンパイル通して、とりあえず Web に転がってる簡単な
サンプルとか動かしたけど問題出ないような。
やや不気味。
>>172 テンプレートを展開するときに必要なメモリがヒープの大きさを越えたんだろ。
C って最強じゃん?!
ごめん。 漏れの確か128だった。
あげといてもいいっすかね
>>117 その age かたはダメ。
唐揚げにして
boost::anyの使い方について、何か面白い例ないでしょうか?
>>179 テンプレート使うのがメンドクセー状況下(VC++が自動生成するクラスとか)
で、あるクラスに、(継承関係のない)任意のクラスのオブジェクトを保持しなければならんとき、
意地でもvoid*を避ける目的で使ったことがある・・がそれだけ。
ありがとうございます。どうやら、型を特定せずにいろんな値をコンテナに プッシュできるようになっているみたいですね。もう少し使ってみます。 便乗質問よろしいでしょうか?boost::multi_arrayを使おうと思い、ドキュメント のサンプルをコンパイルしたら下のようなエラーが出てコンパイルできません。 コンパイラはBCC5.6.1です。 Assertion failed C:\Program Files\Borland\CBuilder6\Include\boost/multi_array/multi_array_ref.hpp(172) : id != 0 at c:\helena\bcc\indep\symtab.c(1142) gcc3.2(MinGW)だときちんとコンパイルできます。やはりBCCは糞でしょうか?
181です。 compiler status(cs-win32.html)を見ると、bcc5.5.1ではmulti_arrayが failとなっているので、その流れでbcc5.6.1もだめなのでしょうね。
boost::any の紹介文が、"typesafe union" だからなぁ。 unionなんぞになかなかご登場願わないC++としては使いどころも限られ。 って感じですかね?
>>183 ですよね。mem_funを使った動的バインディングをコンテナで適用する
程度ですからね。
>mem_funを使った動的バインディングをコンテナで適用する って?
>>185 こういう事を言いたかったのです。
struct A {
virtual void func() { std::cout << "A" << std::endl; }
};
struct B : public A {
void func() { std::cout << "B" << std::endl; }
};
int main()
{
std::vector<A*> v;
v.push_back(new A);
v.push_back(new B);
std::for_each(v.begin(), v.end(), std::mem_fun(&A::func));
}
boost::anyとどう関係が・・・・・ 低脳でスマンコ
>>187 boost::anyとはあまり関係ないか・・・・スマソ
>BCCは糞でしょうか? それだとVCの勃ち場が。
>>189 VCの方が若干boostに対しては優しいみたいだよ。BCCはテンプレート
周りが弱いようだ。
192 :
デフォルトの名無しさん :02/10/28 08:06
>>190 優しいというか、VCユーザの方が多いのでそっちの対応には
力が入っているだけというか。
any は、map 等の連想コンテナとあわせて、アプリケーションでつかうデータの保存に使ってるよ。 ex ) class ApplicationDataContainer { public: typedef std::string KeyType; typedef boost::any ValueType; typedef std::map< KeyType, ValueType > ContainerType; template< typename T > void SetValue( const KeyType id, const T& value ) { return data_[id] = value; } template< typename T > void GetValue( const KeyType& id, T& value ) const { ContaierType::const_iterator i = data_.find(i); value = boost::any_cast<T>( i->second ); } private: ContainerType data_; }; boost::any は、union で定義されている VARIANT などとは比べ物になりませんな
>>193 なるほど・・・・boost::anyに入れたら、取り出す時はboost::anycastを
使うのか。という事は保存状態は、多分void*とかになってるんだろうな。
>>194 違う。
テンプレートを利用した、エレガントでナイスな仕組みになっている。
一度、ソース読んでみろ。
>>194 boost::any は、 void* のようなポインタじゃなくて、
ちゃんと ValueType 型(代入された値の型)のオブジェクトを作成し、
そこへ 引数を渡しているから、元のオブジェクトがすでに無くても大丈夫。
void* var1;
boost::any var2;
{
std::string s("文字列");
var1 = reinterpret_cast<void*>( &s );
var2 = s;
}
std::cout << reinterpret_cast<std::string*>(var1)->c_str() << std::endl; // だめ
std::cout << boost::any_cast<std::string>(var2).c_str() << std::endl; // OK
>>195 ソース読んでみました。こんな短いクラスでanyのような機能を実現
できるんですねえ。
>>196 std::cout << reinterpret_cast<std::string*>(var1)->c_str() << std::endl; // だめ
は大丈夫じゃないかと思うのですが、やっぱりだめなのでしょうか。
>>197 大丈夫なワケないだろ・・・
スコープとポインタ理解してるか?
{
std::string s("文字列");
var1 = reinterpret_cast<void*>( &s );
} // string sはスコープを越えたので破棄される
/* この時点でvar1は解放済みの領域を指している */
std::cout << reinterpret_cast<std::string*>(var1)->c_str() << std::endl; // NG
たまたまうまく動いたからといって
それが正しいコードとは限らない
(むしろこの場合深刻なバグにつながる)
>>198 すんまそん。{}のブロックに囲まれていたのを見過ごしていました。
#というか勝手に取り去って悩んでいた・・・・
出た(藁 「いらないと思ったのではずしたら変な動きをします」系 初心者でもっともやっかいなタイプだな まぁ、そこで終わらなければ上達が速いタイプでもあるんだが 何とかと天才は紙一重
恐らく消したっつーより、コピペ忘れかと。 言葉を額面通りにしか受けとれんよーでは、まだまだ。 相手の状況も考えて判断下さんとな。
>>201 文中にある要素をどうやったらコピペし損ねられるんですか(藁
しかも
>>199 で
>#というか勝手に取り去って悩んでいた・・・・
と自発行動であったことを明言してるし
スレ違いsage
>>200 、202
頼むからスレ荒らすな。
せっかくマターリ進行なのに。
204 :
デフォルトの名無しさん :02/10/29 01:19
boostのdynamic_bitsetを使ってエラトステネスのふるいによる素数を求める プログラムを作ってみたのですが、std::bitsetとの違いって一体何なのでしょ うか?やっぱり実行時にサイズを決められることだけでしょうか? #include <iostream> #include <boost/dynamic_bitset.hpp> int main() { int mx; std::cout << "max = "; std::cin >> mx; boost::dynamic_bitset<> bt(mx); for (int i = 2; i < mx; i++) if (bt[i] == 0) for (int j = i + i; j < mx; j += i) bt[j] = 1; for (int i = 2; i < mx; i++) if (bt[i] == 0) std::cout << i << ' '; std::cout << std::endl; }
>>204 と、思ってたけど違うの?
ってか、名前からしてそれだけのような
きがするが。
マニュアル読むしかないようなきが。
>>204 基本的にはそれだけ。
あと、まぁ、 is_subset_of / is_proper_subset_of が存在すること。
207 :
デフォルトの名無しさん :02/10/29 19:39
is_subset_of と is_proper_subset_of の違いって、よくわからないんだけど、 is_proper_subset_of の方が真部分集合であるということでしょうか? boostのhelpを読んでいたらそのように読めるのですが。
208 :
デフォルトの名無しさん :02/10/29 20:15
よーしパパtransform_iterator_generatorつかっちゃうぞー。
209 :
デフォルトの名無しさん :02/10/29 20:32
VC6では動かなかった。 終了。
boost::iterator_adaptors結構難しいね。中身も複雑だし。 誰か使ってみた人います?
indirect_iterator とか transform_ とか filteri_ とか、できあいのものなら便利につかってますが… ムズカシイネ。
>>211 indirect_iteratorsとtransform_iteratorsとfilter_iteratorsの3つを覚えて
おけば取り敢えずは人に自慢できそうですね:-)。
>>212 なるほど。boostのhelpは英文なのでいま一つ理解できませんでしたが、
日本語で書いてもらうとやっぱり読みやすいですね。サンクス。
>>213 クッションとなる関数 (indirect_ ならポインタはずしだけ行ってファンクタを又呼び) を用意したほうがわかりやすいという罠もあるけどね。3日後に意味がわからないことがたまにある。。。。。
>>214 そうなんですか。boostの中身は確かに標準STLを組み合わせれば実現
できそうなものが多いですね。
indirectのindirectというのは二重にかぶせればいいのかな?
>>215 それはポインタのポインタをコンテナに入れてるってことか?
それはちょいと設計見直した方がよいような気が。
>>216 そうです。いや、単に動くかどうか試してみたかったのです。
どうやら動くようです。
int main() {
std::vector<int**> is;
int a[] = {11, 22, 33};
int *aa[] = {&a[0], &a[1], &a[2]};
is.push_back(&aa[0]);
is.push_back(&aa[1]);
is.push_back(&aa[2]);
std::cout
<< std::accumulate(boost::make_indirect_iterator(boost::make_indirect_iterator(is.begin())),
boost::make_indirect_iterator(boost::make_indirect_iterator(is.end())), 0)
<< std::endl;
}
boost::bindのおかげで、algorithmから呼び出せるメンバ関数の幅が大きく広がった。 が、それでも引数の微妙な型合わせが必要な場合がある。 で、xxx_iteratorシリーズご登場。 という流れなのかなぁ。std::あるごりずむ( b, e, boost::bind(&CMFCのなんちゃら::ほげ,... ) とか書いてるときはキモチいいのは確かなんだけど。
みなさんboostの何をつかってらっしゃいますか? 漏れの場合は(最近のソースコードをgrepしてみると)多い順に 1. bind (圧勝) 2. shared_ptr 3. lexical_cast あとは少しだけfunction, any, format, tuple, scoped_array , ... 数えるとキリがない という感じです。
漏れは 1. scoped_ptr 2. lambda 3. noncopyable 4. date_time てな感じだな。shared_ptrを使う機会が意外とほとんどない。
222 :
デフォルトの名無しさん :02/10/30 08:51
>>220 アンケートか。ほんだら揚げとこか。
1. noncopyable
2. regex
3. format
223 :
デフォルトの名無しさん :02/10/30 11:13
1) bind 2) shared_ptr, scoped_ptr 3) prior, next, ref, cref こまかいのばっかだな〜。 BCC なものでlambda がいけないのが痛いです。
1. format 2. regex 3. noncopyable 前は sprintf() をラップする std::string format(const char *fmt, ...) を書いたもんだけど・・・。
ああ、vsprintf() でした。
226 :
デフォルトの名無しさん :02/10/30 12:22
1) function 2) ptr_fn 3) shared_ptr
1. array 固定長で十分な場面は結構少なくない。 2. scoped_ptr 3. regex これを使い始めてからruby/perlはあまり使わなくなった。 4. format printf一族と手が切ることが出来た。
228 :
デフォルトの名無しさん :02/10/30 19:03
>>221 スタック上にオブジェクトを置くのではなくscoped_ptrを使うとうれしい
のってどういう時なんですか?
使いどころを激しく教えてホスイです!
1. scoped_ptr 2. format 3. regex 4. lexical_cast 5. tokenizer …文字列処理が多いんで。
230 :
デフォルトの名無しさん :02/10/30 20:31
231 :
デフォルトの名無しさん :02/10/30 20:44
#include <stdio.h> int main(void) { int num1; printf("あなたの年齢を入力してください。\n"); scanf("%d",&num1); double num2; double num3; printf("あなたの身長と体重を入力してください(センチ、キログラム)。\n"); scanf("%lf",&num2); scanf("%lf",&num3); printf("あなたの年齢は'%d'です。\n"); printf("あなたの身長は、%lf、あなたの体重は%lfです。\n"); return 0; } このプログラムを実行したところ身長の入力をした時にruntime errorが 出てきたんですけど、エラーは0なんですけどこれはなぜなんでしょうか? ご指導いただけたら幸いですm(__)m
>>231 このスレに質問するのは著しく不適切です。
宿題じゃなかった写し
235 :
デフォルトの名無しさん :02/10/30 20:56
すいません・・・他の板にカキコさせていただきますm(__)m
>>228 >>221 じゃないけど、
例えばコンストラクタでnewしてデストラクタでdeleteするとき。
そのポインタをscoped_ptrでラップする。
vectorでもいいけど、オーバースペックかな?と思う時があるのと、
const auto_ptrよりも意味が明確に思えるんで。
>>228 俺が良く使うのは、pimpl イディオム使って実装を隠蔽するケース。
scoped_ptr は所有権を移譲できないというところが潔くて好きだ。 その点、auto_ptr は中途半端。
240 :
デフォルトの名無しさん :02/10/30 23:13
>>230 boost::aryって int hoge[] = {1, 2, 3}; の模倣はできないんですかねえ?
固定長配列、私の用途だと要素数を明示したくないことがしばしば。
>>240 s/ary/array/;
anyと混ざった・・・鬱
242 :
デフォルトの名無しさん :02/10/31 15:26
質問れす。 next, priorに関連することなのですが、 なんでポインタ型のイテレータ(cont.begin()がT*を返す) を直接インクリメント(デクリメント)する のはダメなの? typedef vector<int> cont_type; cont_type cont; ... for(cont_type::iterator it=++cont.begin() //bad! ; it!=cont.end() ; ++it) { ... } 文法的にも問題あるようには見えないんだけど... なにか文法的に矛盾してしまうこととかあるの?
>>244 一応next, priorに関連すると思うんだが…
>>242 右辺値と左辺値を勉強してきてくれ。
++ 演算子は右辺値にしか適用できない。
T* は左辺値。
右辺値を返す関数は型が T*&。
>>245 レスTHXです。
そっか。考えてみたら、
++246;
と一緒か。
結局スレ違いだった。スマソ...
>>245 左右が逆じゃありませんこと?
かくいうおれもよく間違えるんだが。
249 :
デフォルトの名無しさん :02/11/01 18:41
boost::tupleのset_open()とかの使い方がよくわかりません。マニュアルを見て下のような プログラムを書いてみたのですが・・・・・どういう時に使うとよいのでしょうか? typedef boost::tuple<int, double, std::string> Btids; Btids func() { return boost::make_tuple(1, 1.1, "abc"); } int main() { Btids x; x = func(); std::cout << boost::get<0>(x) << ' ' << boost::get<1>(x) << ' ' << boost::get<2>(x) << std::endl; std::cout << boost::tuples::set_open('[') << boost::tuples::set_close(']') << boost::tuples::set_delimiter(',') << x; }
250 :
デフォルトの名無しさん :02/11/01 18:57
どうして1が5つ出てしまうのでしょうか? typedef boost::shared_ptr<int> Bsi; bool ValueComp(const Bsi& bs1, const Bsi& bs2){ return *bs1 < *bs2; } int main() { std::vector<Bsi> vsi; vsi.push_back(Bsi(new int(1))); vsi.push_back(Bsi(new int(4))); vsi.push_back(Bsi(new int(3))); vsi.push_back(Bsi(new int(5))); vsi.push_back(Bsi(new int(2))); std::sort(vsi.begin(), vsi.end(), ValueComp); std::vector<Bsi>::const_iterator pos = vsi.begin(); while (pos != vsi.end()) std::cout << *pos++ << std::endl; }
250です。 *pos++を**pos++としたら数字は表示されました。 しかしまだソートがうまく行きません。
・・・・・と思ったらstd::sortをコメントアウトしていました。スマソ。 boost::shared_ptrはstd::auto_ptrと違い、コンテナに入れてソートしても いいんですよね。
>>251 VC6SP5 でうまく行っておりまする・・・。
>>253 ありがとうございます。
ついでなのですが、ValueCompを次のような叙述関数で書くべきなのでしょ
うか?これはboostの質問ではないですね。
struct ValueComp : public std::binary_function<const Bsi&, const Bsi&, bool> {
bool operator()(const Bsi& bs1, const Bsi& bs2) {
return *bs1 < *bs2;
}
}
>>254 メシ食ってたYO!!!
関数オブジェクトを用いる一番の利点は、コンパイラに処理をインライン展開
させる事らしい。
250 の書き方だと関数ポインタが発生するから、インライン展開できなくなる。
not2() とかも使えないし。
それでもいいなら好きなように。
>>255 ありがとうございます!!手間を惜しまず関数オブジェクトにします!
257 :
デフォルトの名無しさん :02/11/01 23:55
>>245 >++ 演算子は右辺値にしか適用できない。
適用すると右辺値になる、が正解じゃないの?
boost::lambda使っておられる方いらっしゃいますか?
259 :
デフォルトの名無しさん :02/11/02 02:51
つーかboost::lambdaって何に使うの? あの辺の構文てオナニーにしか見えないんだが。 開発者のジョークだろ。
lokiの方がオナーニだろ。
boost::smart_ptrのvector vのソートの時とか std::sort(v.begin(),v.end(),*_1 < *_2); と書くほうが 関数オブジェクト用意するより見やすくない?? ifだとか色々使うのはもう潔く関数オブジェクトにしたほうがいいとは思うけど
compose系のほうがオナーニに感じるなぁ。 意地でもワンライナーな皆さんを応援しちゃうぞ、みたいな。 # 好んで使いますが(w
263 :
デフォルトの名無しさん :02/11/02 19:29
lambda使うと、bind2ndとか難解な構文を使わなくても仮引数で表現 できる所がうれしい。 難を言えば、gccぐらいでしか動かない事かな。 composeってcompose_f_gx_hyとか?あれは欲しいよ。二つの文字列 をある基準で比較する時なんかにstd::lexicographical_compareと 組み合わせてよく使っている。
264 :
デフォルトの名無しさん :02/11/02 20:17
>>264 STLスレッドからの転載だけど、例えばstringを大小文字区別しないで辞書順に
挿入したりソートしたりする時とか。
struct StrCmpi {
bool operator() (const std::string& s1, const std::string& s2) const {
return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(),
boost::compose_f_gx_hy(std::less<char>(), std::ptr_fun(std::toupper), std::ptr_fun(std::toupper)));
}
};
int main()
{
typedef std::map<std::string, size_t, StrCmpi> Ssize;
Ssize mp;
mp.insert(std::make_pair("test1", 123));
mp.insert(std::make_pair("Test2", 456));
Ssize::const_iterator pos;
for (pos = mp.begin(); pos != mp.end(); ++pos)
std::cout << "string = " << pos->first << ", size_t = " << pos->second << std::endl;
}
あっこれ関数オブジェクトにして使ってください。
こんな感じで。 struct StrCmpi : public std::binary_function<const std::string&, const std::string&, bool> { bool operator() (const std::string& s1, const std::string& s2) const { return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), boost::compose_f_gx_hy(std::less<char>(), std::ptr_fun(std::toupper), std::ptr_fun(std::toupper))); } };
268 :
デフォルトの名無しさん :02/11/03 01:46
ptr_fun はイマイチだなぁ。inline化されるような方法はないだろうか。
>>268 ptr_fun使わないで、関数オブジェクトを呼び出すようにすれば
いいじゃん。その代わり既存のライブラリは使えなくなるが。
Kylixが最近C++対応したみたいだけど、コンパイラってg++なんだっけ? bccもどきなんだっけ? 後者だったりする場合、boostって使えてますか? 使ってる人感想きぼうん
271 :
デフォルトの名無しさん :02/11/03 10:40
GCCでええやん。
>>270 BCCはboost::lambda、boost::format、boost::array、boost::multi_array以外は
だいたい通るよ。kylixが糞なのだと思う。
>>271 今 C++ コンパイラ作り直してるから、それが出て完成度が高まるまで
待つしか。
275 :
デフォルトの名無しさん :02/11/06 10:34
から揚げ
276 :
デフォルトの名無しさん :02/11/06 10:36
商用のプロジェクトでboost使ってライセンス的に問題が生じた経験の ある人いる?
>>276 boost使っても、コードの中に"boost"とかいう文字列でも入らなければ、
使った事はまずわからないような気もするが。
テンプレートライブラリはそういう点ズルができそう。
だめぽ
>>277 $ g++ hoge.cpp
$ nm a.out |grep boost
080493fc W _ZN5boost12lexical_castISsiEET_T0_
0804a3ea W _ZN5boost16bad_lexical_castC1ERKS0_
0804a3ca W _ZN5boost16bad_lexical_castC1Ev
0804a488 W _ZN5boost16bad_lexical_castD0Ev
0804a40c W _ZN5boost16bad_lexical_castD1Ev
0804a4c2 W _ZNK5boost16bad_lexical_cast4whatEv
0804b00c V _ZTIN5boost16bad_lexical_castE
0804a548 V _ZTSN5boost16bad_lexical_castE
0804b018 V _ZTVN5boost16bad_lexical_castE
$ strings a.out |grep boost
N5boost16bad_lexical_castE
$ strip a.out
$ strings a.out |grep boost
N5boost16bad_lexical_castE
>>277 それに、ライセンスは守るっていう前提でヨロスコ・・
VC++のReleaseBuildでもやはり若干形跡が残るなぁ。 .?AVbad_any_cast@boost@@ boost::bad_any_cast: failed conversion using boost::any_cast .?AVuse_count_is_zero@boost@@
281 :
デフォルトの名無しさん :02/11/06 11:13
Type_info::name だよね。きっと。
長文すまそ。 たとえば regex.hpp には次のような条がある。 /* * * Copyright (c) 1998-2002 * Dr John Maddock * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Dr John Maddock makes no representations * about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * */ ということで、バイナリには "Copyright (c) 1998-2002 Dr John Maddock" を埋め込んで、ドキュメントには上の条文全文を記しておけばよいらしい。 でも不安なのは、"this software" というのが何を指すかだ。こちらが作った プロダクト全体を指す、とか解釈されたらたまらんw
また、scoped_ptr.hpp では、
// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
// Copyright (c) 2001, 2002 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
// See
http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation.
//
となっている。こちらは copyright notice だけでよいらしい。
でも、"the above copyright notice" じゃなくて、"this copyright notice"
になっているところが不安。まさか条文全体のことを指してるとかw
ナルホド。じゃぁ、 [copyright.h] namespace { const char* regex_hpp = "Copyright (c) 1998-2002 Dr John Maddock"; const char* scoped_ptr_hpp = "(C) Copyright Greg Colvin and Beman Dawes 1998, 1999." "Copyright (c) 2001, 2002 Peter Dimov"; } とでもしておいて、boostをincludeするときにコイツも一緒にincludeすればいいかな。 ありがとう。
結構面倒だね
287 :
デフォルトの名無しさん :02/11/06 18:00
>>284 みたいに、バイナリに文字列を埋め込まないと駄目なの?
コメントじゃいかんの?
Must not require that the license appear with executables or other binary uses of the library.
さんきゅす
ここでいう "license" には copyright notice も含まれるんか?
291 :
デフォルトの名無しさん :02/11/06 20:14
・ソースを公開するときにはboostのライセンス表記をそのまま残す といわれても、普通は#includeするだけだから残すもなにもないとおもうんだけども。。
>>291 ライブラリ部分を改変した場合の話なんじゃ?
まとめると… ・バイナリへの埋め込みは推奨(義務ではない)。 ・作成したプログラム等に付属するドキュメント等には 明記する必要はなし。 ・ライブラリを改変等した場合に©表記の必要が でてくる。 であってる?
296 :
デフォルトの名無しさん :02/11/07 11:11
・バイナリへの埋め込みは義務ではない。 ・作成したプログラム等に付属するドキュメント等にはライブラリ冒頭の ライセンス条項をそのまま転記する必要がある(*)。 ・ライブラリを改変等した場合に元のライブラリ冒頭の?表記を削除 してはいかん。 (*)必要ないライブラリもある(scoped_ptr他) だと思われ。
>>296 s/?表記/copyright表記/
化けてしまったよ。
組み込みでEmbedded-C++ではない、普通のC++を使えているラッキーな人で、 boostも使っている人っています?boost使うことを密かに画策中なんですが。
boostを使う理由って、単に使ってみたいってだけだろ。
301 :
デフォルトの名無しさん :02/11/07 11:24
>>299 僻むほど難しくないから使ってごらん。
ほんとに。
煽る屑は放置するとして、298にお答え希望〜
boostを使う理由がないので使っていません。
>>304 僕は便利だと思っているのですが、それはどうやら間違った考えだったので304=299さんのように
boostなどはきっぱりと使うのをやめ、まっとうなコーディングに戻ります。
お導きありがとうございました。
...とでも言って欲しいんでしょうか?意図を量りかねる。
>>305 > 意図を量りかねる。
それは馬鹿だから。
perl最強!! perl >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> boost
>>307 perl厨のせいにしようとしてるよ。
必死だな。よっぽど悔しかったと思われる。
STLスレの887の実装って、var型に依存しない形にするにはどうしたらいいんでしょうか? いろいろ試しているんだけどよくわからない・・だれかhelp. typedef boost::indirect_iterator_pair_generator< std::vector<var*>::iterator, // 元になるイテレータ(or ポインタ) var // operator*(operator*())が返す修飾なしの型 // ここにconstと非constについての参照型やポインタ型が並ぶが省略可 > iterator_gen; // とりあえず命名 std::vector<var*> var_list; iterator_gen::iterator i(var_list.begin()); iterator_gen::const_iterator j(var_list.begin());
310 :
デフォルトの名無しさん :02/11/07 12:44
皆さんにお伺いしたいのですが boost の利点と欠点を教えてもらえないでしょうか? 面白かつ便利そうなので使ってみようと思うのですが,いまいち情報が少なくて... コーディングしたときの速度なんかについても教えてほしいです. やはり,便利と速度は両立しないのでしょうか?ここが特に気になります.
>>310 bind, iterator_adaptors あたりは、最適化(inline化)しないと遅いかもしれない。
でも、最適化かければぐちゃぐちゃにinline化されてなかったことになる(言い過ぎ)
のであまり気にしてない。
そもそも、boostと一口にいわないで、boostのどれ、と言わないと答えにくいと思われ。
313 :
デフォルトの名無しさん :02/11/07 17:28
Macintosh版CodeWarrior8でBoost使ってる方いますか? regex++を使いたいと思って入れてみたんですが, CodeWarrior5用のプロジェクトファイルは発見できたものの, 8では読み込めずどうしたものかと。。。 regex++の場合は単に,hppをincludeすればいいというわけにはいかないんですよね?
>>309 template<typename A> struct iterator_gen :
boost::indirect_iterator_pair_generator<
std::vector<A*>::iterator,
A
> {};
あと適当にHelper関数作ったほうが便利だと思うけど、
std::iterator_traitsとかboost::type_traits の詳細を忘れた。。。
315 :
デフォルトの名無しさん :02/11/10 12:52
教えていただきたいことがあります vc60にて、"boost/lambda/lambda.hpp" をインクルードしただけで "fatal error C1001: 内部コンパイラ エラー" というエラーが発生してコンパイルができません。 回避方法をご存知の方がいらっしゃったら教えてください。よろしくお願いします。
AnSi C++対応を目指すことすらしないコンパイラに何かを期待しても 無 駄 で す
ぶぁか
ちなみに98パーセントまで対応したというのなら、 そこりの2パーセントがなんなのかを列挙して欲しいところですな。
確か、templateのexportには対応せんとどこかで言ってた気がした。
323 :
デフォルトの名無しさん :02/11/10 18:00
なるほど。サンクス。 つまり、参照カウントであれリンクリストであれ、管理される対象としての オブジェクトの中身をいじるようなのがintrusive (侵入的) と呼ばれるわけだね。
どなたかdate-timeライブラリ使われた方いらっしゃいます?
exportサポートしてる処理系なんてほとんどないだろ。二つ、三つくらいか?
>>327 存在することの方が驚きだ(ぉぃ 具体的に、どのあたりの処理系が
サポートしてるんでしょう? ちょっとドキュメント読んでみたいぞ。
Comeau C++ はサポートしてるらしいね。漏れは他はしらないや。
330 :
デフォルトの名無しさん :02/11/12 01:18
VC60 にて Lambda が使えないことについての件、了解しました。 どうもありがとうございました。
Lambda をランバダと呼んでしまうのはダメですか?
VisualScheme.netではランバダ許可。
Lambda って何で Lambda なの? Λ ・・・モナーの耳、でもないし・・・。
λ(x)≡x^2+2*x+1
あー違った…。 modulo ≡λ(x, y : N→N) x%y
スマン、そっちじゃなくて、boost::lambda。
だから、 λ算法→lispのlambda→boost::lambdaじゃないの? でも、λ算法がなぜλなのかは知りませんです。
コンナノワカンネェヨ… __λ...________ { } 日本海{
340 :
デフォルトの名無しさん :02/11/15 10:11
preprocessorメタプログラミングは面白いんだけど、 これってやっぱり仕事で使うのはヤバイ?保守性下がる? コードは小さくなりそうなんだけど。。。
面白いけど、これを実務に使うのはどうかと…。 強力だし、面白いから癖になって乱用しそうなヨカソ
342 :
デフォルトの名無しさん :02/11/15 12:12
BOOST_PP_LIST_*は凄いね。 Typelistには前に驚いたけど、これにもびっくり。 Cをそれほど深くやっていたわけじゃないので正直驚いた。 マクロプログラミングマンセー!!!
343 :
デフォルトの名無しさん :02/11/15 15:47
マルチステージコンパイレーションと一言でいってしまうと、 今まで強調されてたマクロの弊害が、ウソみたいに思えてくるから不思議ですね。 マンセー!!! でもやっぱりこれはライブラリ内のような特殊な場所だけで使うべきものかな。 可読性も重要な要素だし。。。
344 :
デフォルトの名無しさん :02/11/17 15:33
いろいろとやってみたけど、使えるデータ型はリストだけだね。 リストはまともに動くとして、配列は、SIZE(要素数), ELEM(要素取得),DATA(そのままの値)の三種類のマクロしかないし、 タプルに至ってはかなり動作がおかしい。汗 #define LIST (a, b, c) BOOST_PP_LIST_TO_TUPLE(LIST) でTUPLEを作成すると ⇒ ( a , b , c ) と余分なスペースが入ってしまいます。 これがBOOST_PP_TUPLE_*マクロにおいては致命的だったりします。 使おうと思ってるひとは要注意です。 boost内部で結構使いまくってるから、それ見ればいいんだろうけど、 そこまでやるような元気はいまのところはないしなあ。。。
時間の無駄
>>344 動作がおかしいのはあなたの頭ではないかと
存じますがいかがでございましょうか?
> #define LIST (a, b, c)
それtupleでしょ?
> これがBOOST_PP_TUPLE_*マクロにおいては致命的だったりします。
なにが?
#include "boost/preprocessor/list/adt.hpp"
#include "boost/preprocessor/list/to_tuple.hpp"
#include "boost/preprocessor/list/size.hpp"
#include "boost/preprocessor/tuple/elem.hpp"
#include "boost/preprocessor/tuple/reverse.hpp"
#include "boost/preprocessor/tuple/to_list.hpp"
#include "boost/preprocessor/stringize.hpp"
#include "boost/preprocessor/arithmetic.hpp"
#define LIST (a, (b, (c, BOOST_PP_NIL)))
#define LIST_SIZE BOOST_PP_LIST_SIZE(LIST)
#define TUPLE BOOST_PP_LIST_TO_TUPLE(LIST)
TUPLE
BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(LIST_SIZE, 1, TUPLE))
#define TUPLER BOOST_PP_TUPLE_REVERSE(LIST_SIZE, TUPLE)
BOOST_PP_TUPLE_TO_LIST(LIST_SIZE, TUPLER)
( a , b , c )
"b"
(c, (b, (a, BOOST_PP_NIL)))
347 :
デフォルトの名無しさん :02/11/17 16:47
>>346 いや、LISTの件は打ち間違い。訂正ね。
>( a , b , c )
だからこれがうまいこと処理されないのよ。
これから無駄なスペースを取り除くのはREPEATを使ってやるしかなさそうだけど、
今考え中。
あ、ちなみにBOOST_PP_TUPLE_ELEMだけはスペースに関係なくちゃんと 評価されます。
おれの頭がおかしかったかも。。。 REVERSEとTO_LISTとELEMに関してはなんの問題もないと思う。 というかスペース云々も関係なし。 REMとEATの使い方がおかしいらしい。もうちょっと試してみますね。 失礼しました。m( )m
350 :
デフォルトの名無しさん :02/11/17 18:38
んー、やっぱり boost/preprocessor/tuple/rem.hpp の BOOST_PP_TUPLE_REM(3)(a, b, c)はどうもうまくいかないなあ。 (a, b, c)のところが文字列そのままなら上手くいくんだけど、 #define切った値だとうまくいかず。 やってることは #define TUPLE (a, b, c) BOOST_PP_TUPLE_REM(3)TUPLE ってだけなんだけど、 BOOST_PP_TUPLE_REM_3(a,b,c) ってところまででプリプロセッサが評価するのやめちゃう。 あと一つなんだけどなあ。。。 上のヘッダーにはちゃんと #define BOOST_PP_TUPLE_REM_3(a, b, c) a, b, c ってのが入ってます。 無知な私に誰か助け舟よろしこ。 環境 cgywin g++ 3.2
>>350 #include "boost/preprocessor/cat.hpp"
#include "boost/preprocessor/tuple/rem.hpp"
#define TUPLE (a, b, c)
BOOST_PP_CAT(BOOST_PP_TUPLE_REM(3), TUPLE)
a, b, c
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/tuple/eat.hpp>
#include <boost/preprocessor/tuple/rem.hpp>
//リストからタプルとその要素数を作成
#define LIST (a, (b, (c, BOOST_PP_NIL)))
#define LIST_SIZE BOOST_PP_LIST_SIZE(LIST)
#define TUPLE BOOST_PP_LIST_TO_TUPLE(LIST) //( a , b , c )
//タプルのカッコを外す
BOOST_PP_CAT(BOOST_PP_TUPLE_REM(LIST_SIZE),TUPLE)
//⇒ a, b, c
//条件により、タプルの消去または整形を行う
#define OP(x, y, z) (x * y * z)
#define MACRO(n) BOOST_PP_CAT(BOOST_PP_IF(n, OP, BOOST_PP_TUPLE_EAT(LIST_SIZE)),TUPLE)
MACRO(0) //expand to nothing
//⇒
MACRO(1)
//⇒ (a * b * c)
/*
いちおう後から誰か見るかもしれないので、まとめてみました。
BOOST_PP_TUPLE_REM、および、BOOST_PP_TUPLE_EATのサンプルコード
においては上のようにBOOST_PP_CATを使うのがよさそうです。
*/
/*
>>346 さん、
>>351 さん、激しく感謝! */
#include <boost/preprocessor/list/size.hpp> #include <boost/preprocessor/list/to_tuple.hpp> 抜けてた おれもう、ダメぽ
355 :
ヒキコモラ :02/11/18 15:28
boostのソースすげー勉強になる!
356 :
デフォルトの名無しさん :02/11/21 01:54
激しくアホな質問していいでしょうか? 他の人と共同でプログラムを作成するときに、 ・AさんはBoostをインストールしている ・Bさんはインストールしていない こういう状況で、AさんのコードをBoostのインストール無しで Bさんの環境で使用することはできるのでしょうか?
ただしAさんのコードにboostが使ってなければOK。
regexとgraphとthreadはリンクが必要だけど あとはただのテンプレートライブラリです。
コンパイル済みのオブジェクトファイルなら使えるんではないかい?
>>360 それかLIBにするか。でもexportキーワードをサポートしてないコンパイラだと
そもそもboostをLIBにすることはできん。
>>361 実行ファイルに埋め込まれたものを設置する場合
「Aさんのプログラムをインストール」と言うことはあっても
「Boostをインストール」とは普通言いません。
>>359 にあるライブラリを使わなければすべてインライン展開
されますから別途ランタイムも必要ありません。
>>363 コンパイル済みプログラムではなくてコードと書いてありますが何か?
要は釣りです。みなさん以後、356の質問は無視ということで
366 :
デフォルトの名無しさん :02/11/21 19:14
365=363 可哀想に・・・
釣ったりするつもりじゃなかったんですけどね・・・ でも、なんとなくわかりました。 ようするに、大抵のやつは、boost以下のディレクトリを そのままコピーしちゃえば使えるってわけですね。
368 :
デフォルトの名無しさん :02/11/30 11:44
新しいスレが出来たからこのまま落とした方がよいのでしょうか。
良くない きちんと消化してから移行
この勢いだと消化されるのは来年の春ぐらいだな・・・
あちらのスレにはアンチboostがいるみたいだからやりにくいや。やっぱり こちらで細々とやっていきます。
372 :
デフォルトの名無しさん :02/12/05 12:47
ネタ期待age
373 :
デフォルトの名無しさん :02/12/05 15:31
boost::mplとLokiのタイプリストはどっちを使えばいいのでしょう? Lokiの方が実装が綺麗なんですが、boostは機能が多い。またSTLに 似せて作られているので使いはじめるのは割と簡単。また半公式的 ライブラリという形でサポートも一応続けられるだろう。 みなさんのお考えを聞かせて。
374 :
名無しさん@Emacs :02/12/05 23:00
boost::mpl::push_backの使い方がどうもよく分らないです。 #include<boost/mpl/vector.hpp> #include<boost/mpl/push_back.hpp> #include<boost/mpl/at.hpp> using namespace boost::mpl; typedef vector<int,int,int> types1; typedef push_back<types1, int>::type types2; typedef at_c<types2, 2>::type type; BOOST_STATIC_ASSERT((boost::is_same<type,int>::value)); int main(){} このようなコードでコンパイルすると以下のようなメッセージが出ます。 test.cc: `boost::mpl::push_back<types1, int>' の初期化: test.cc:7: `boost::mpl::at_c<types2, 2>' から実体化されました test.cc:7: ここで実体化されました test.cc:7: base class ` boost::mpl::push_back_traits<boost::mpl::aux::vector_tag<3> >::algorithm<types1, int>' has incomplete type test.cc: `boost::mpl::at_c<types2, 2>' の初期化: test.cc:7: ここで実体化されました test.cc:7: no type named `tag' in `struct types2' test.cc:7: 文法エラー が `;' トークンの前にあります test.cc:8: `is_same' undeclared in namespace `boost' test.cc:8: `type' was not declared in this scope test.cc:8: 構文解析エラー が `>' トークンの前にあります test.cc:8: ISO C++ forbids declaration of `BOOST_STATIC_ASSERT' with no type 何がおかしいんでしょうか? 環境はcygwin g++-3.2です。
>>374 作者さん曰く、
http://lists.boost.org/MailArchives/boost/msg40024.php > Basically, what compiler is trying to say here is that
> 'push_back' on 'vector' is currently not implemented, - sorry! I know it
> differs from what the docs say, and it's on my to do list. Meanwhile, if you
> switch to using 'push_front' instead, everything will work just fine.
だそうな。
>>375 どうもありがとう。mplが非公開な理由が分りました。
しばらくはその実装を見ながらゆっくりじっくり勉強する方がよさそうですね。
377 :
デフォルトの名無しさん :02/12/07 04:31
hackあげ
みんぷるあげ
379 :
デフォルトの名無しさん :02/12/07 21:13
boost::mpl::vector,boost::mpl::listの最大サイズが10に設定してあるのって なにか理由があるのかな?
380 :
デフォルトの名無しさん :02/12/08 13:55
閑古鳥age
boost/libsの下のテストコードを見てれば大体使い方分るね。
382 :
デフォルトの名無しさん :02/12/09 21:03
threadを使ってみようと思ったのですが、どうしてもリンクエラーが出ます。 試しにコンパイルしようとしたのは、libs/thread/tutorial/count.cppです。 $/usr/bin/g++-3.2 -I/usr/include/boost -lpthread -lstdc++ \ -lboost_thread counter.cpp -o counter こんな感じにコンパイルしたのですが、全てのthreadライブラリ関数において エラーが出ている模様です。 gccの基本的な使い方が悪いとは思うのですが、どこをどうしたらいいのやら 全く分りません。助けてください。
>>382 error message はどんなのが出とるんじゃい。
-L で boost_thread の場所をし忘れてるだけとかじゃあるまいな。
× 場所をし忘れてる ○ 場所を指定し忘れてる イッテクル
385 :
デフォルトの名無しさん :02/12/09 22:15
>>383 Debianなのでlibboost_thread.aは/usr/libの下にあります。
なのでディレクトリ指定は要らないはずです。
エラーメッセ―ジですが、先頭の数行だけ貼らせてください
/tmp/ccvytNoa.o(.text+0xba): In function `main':
: undefined reference to `boost::thread_group::thread_group[in-charge]()'
/tmp/ccvytNoa.o(.text+0xed): In function `main':
: undefined reference to `boost::thread_group::create_thread(boost::function0<void, boost\
::empty_function_policy, boost::empty_function_mixin, std::allocator<boost::function_base\
> > const&)'
/tmp/ccvytNoa.o(.text+0x12e): In function `main':
: undefined reference to `boost::thread_group::join_all()'
/tmp/ccvytNoa.o(.text+0x145): In function `main':
: undefined reference to `boost::thread_group::~thread_group [in-charge]()'
/tmp/ccvytNoa.o(.text+0x162): In function `main':
: undefined reference to `boost::thread_group::~thread_group [in-charge]()'
/tmp/ccvytNoa.o(.text+0x1c8): In function `__static_initialization_and_destruction_0(int,\
int)':
>>385 libboost_thread.aはどこにあったファイルをコピーした?
libs/thread/build/bin/libboost_thread.lib/gcc/release/runtime-link-static/threading-multi
にあった奴をlibにコピーして使うとうまくリンクできて実行できました。
387 :
デフォルトの名無しさん :02/12/10 00:44
>>386 レスありがとうございます。
えーと、Debianなのでapt-getしたまでです。
Debian/unstableのboostは1.29です。
もしかしたらバイナリの互換性がないg++-3.1で
ビルドされているのかもしれないですね。
それもありえるとは思うのですが、でもgcc3は
3.2に積極的に移行を進めているわけだし
それもなさそうな・・・んー
ビルドはbjamを使ってやったよね。
389 :
名無しさん@Emacs :02/12/10 04:54
>>388 bjamの使い方が分からないので、DebianやGentooを使っているのですが(藁、
どうしてもリンクエラーが出ます。ともにバージョンはboost-1.29,gcc-3.2
ソースは以下のような極単純なもの。Gentooに関してはgcc-3.2でビルドして
いるので、例のバイナリ互換性の話は関係ないはずです。
/* test1.cpp */
#include<boost/thread/thread.hpp>
boost::thread th;
int main(){}
エラーは以下の通りです。
/usr/bin/g++-3.2 -Wall -I/usr/include/boost -L/usr/lib -static -lboost_thread test1.cpp -o test1
/tmp/ccwtA3Jx.o(.text+0x36): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `boost::thread::thread[in-charge]()'
/tmp/ccwtA3Jx.o(.text+0x65): In function `__tcf_0':
: undefined reference to `boost::thread::~thread [in-charge]()'
collect2: ld はステータス 1 で終了しました
make: *** [test1] エラー 1
もう分からない。。。これ以上はスレ違いなのでよそへ逝きます
391 :
デフォルトの名無しさん :02/12/10 15:38
(゜∀゜)マジで? やってみよう!
>>386 =388=390
382氏はDebian使ってるってんだからわざわざビルドさせんでも…
という気がする。
Debianって何?俺はWindowsしか知らないのでわからないのだが・・・・ ソースをビルドしなくても使えるの?
>393 Linux のディストリビューションの一つ。 > ソースをビルドしなくても使えるの? 何か激しく勘違いしてると思われ。
>>394 そうなんですか?
>わざわざビルドせんでも・・・
と書いてあったのでてっきりそうなのかと。
>>396 それ(・∀・)イイ!!ぜひWindowsにも実装して欲しいものだ。
と言ってもビルドはboostに限って言えば非常に簡単なのだが。
しかし、Debian使ってリンクが通らないという事は、一度bjamでビルドしてリンク して試される事を強くオススメしたい。 出来るものは同じかもしれないが、もしかしたら違うかもしれないし。
関数の数を無闇に増やしたくないとか、ローカル変数を渡すのが面倒とかいう場合は GoSub よく使うけど。 GoTo と一緒で、使い様って事でしょ。
ごめん、VB スレの誤爆。
401 :
デフォルトの名無しさん :02/12/19 11:40
GNU的には他のライセンスのヘッダが入ることってどうなの? gccなんかでもcontribというディレクトリに違うライセンスの ファイルを嫌そうに入れてあるけど。
403 :
デフォルトの名無しさん :02/12/22 21:05
BOOST_NO_EXCEPTIONSのサポートがちゅーとはんぱだねぇage
lexical_cast って、 ワイド文字に対応してないんだね。 wstring str = lexical_cast< wstring >( x ); でコンパイルエラーが出たときは涙でたよ
>>405 つーか標準で
#ifndef USE_WIDE_CHARACTOR
typedef char char_t
#define str_t( text ) (text)
#else
typedef wchar_t char_t
#define str_t( text ) L(text)
#endif
typedef std::basic_string< char_t > tstring;
typedef std::basic_stringstream< char_t > tstringstream;
とか定義して、
tstring str = str_t("12.4");
とか出来るようにしてほしい。
>>406 んな事したらchar→wcharの変換が…
といってもlexcal_cast.hppはもう一年近く放置されてるよなあ
自分で書いてまえ
string と wstring って相互代入できれば (・∀・)イイ!! のに
コンパイラのバグじゃないの?
413 :
デフォルトの名無しさん :02/12/31 03:49
ちょい保守
414 :
デフォルトの名無しさん :03/01/05 23:46
ほすー
415 :
デフォルトの名無しさん :03/01/07 11:07
会社での仕事で汚いマクロが作業効率を落していると思って、 BOOST_PP_*の使用を強制させようとしたのだけど、どうも周りから 同意が得られませんでした。みなさんのところはどうですか? こういうのってみんなで一斉に始めないとダメだと思うのだけど。
まずそのマクロを多用しようとする姿勢を何とかすれ。
まずは enum、const変数とinline関数辺りから始めた方が…
もしかして漏れってそうとうドキュソなところで仕事してる?
もしかしなくても
>418 上がしっかりしてるだけまだマシ。 漏れの所なんて…
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
422 :
デフォルトの名無しさん :03/01/08 23:45
age
(;´Д`)ハァハァ
ぎゃーIPがとられたー
転送量倍になっても平気なの?
>258 恒久保存なんて無理でしょ。
年賀状来ましたか?
みゆたんにボクチンのIP教えてもいいよ♥
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
l≡l . l≡l |:::└┬┘:::| |:::┌┴┐:::| / ̄ ̄\ ノ::::::丶 /:::::::\. / ̄ ̄\ | 記念 .> (::(,,゚Д゚)(゚ー゚*)::) < パピコ .| \__/ |:∪::::| |::::∪::|. \__/ 〜((((:::::))(((:::::)))〜 ∪ ̄U U ̄∪
まあ俺みたいにどうせ2chでうんこうんことかしないよとか書いたり それ以外の時間は実況板にいる実況厨には無関係な話な訳で ip?どれだけでも取ったってください 無責任発言を繰り返す馬鹿や殺人予告するど阿呆が減っていいんじゃないっすか?
432 :
デフォルトの名無しさん :03/01/09 12:12
IPシめる実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバで生意気なIPをシめてやる実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
赤黒い怒張が暴れているということはお尻がおねだりしていることを視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPをシめて何か今までと変わることってあるのでしょうか?
・今までより、肉棒は硬度を増していく。
・裁判所や警察からの舌技があった場合にはサーモンピンクの亀頭が徐々に姿を現すことがある。
>>124 イスラエルのひろゆこ---インドのよしゆき---中国のひろゆこ---北欧のひろゆこ---カナダのひろゆこ---エジプトのひろゆこ
---自宅のひろゆこ
に聞けば一発で分かります。
434 :
デフォルトの名無しさん :03/01/09 16:38
age
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
436 :
デフォルトの名無しさん :03/01/09 18:37
マルチ氏ね
開くスレの最後にすべてに書かれてるから デジャヴか鯖がいかれたのかとオモタヨ...
テストカキコミ
>>91 結局ひろゆきがいつの時点で消していれば、賠償責任を逃れられたのでしょうかね?
>>91 結局ひろゆきがいつの時点で消していれば、賠償責任を逃れられたのでしょうかね?
>>93 訴状が来た時点ではまだ削除しなくておkなんじゃないの?
>>443 だからこそ荒らされたわけだよね。
犯人にそれ以上の請求をすべき。
あまりにもくだらねー理由だと何百もでないだろ
>>587 ひろゆきが出てきたらもの凄い勢いで1000まで逝ってしまった・・・。
チャンスですね。。奪還!
/⌒ヽ / ´_ゝ`) IP太郎です。 | / | /| | // | | U .U
449 :
デフォルトの名無しさん :03/01/10 20:52
age
相手のIP教えていただくには どういった手続きをとればいいんですかね?
華麗なうんこレスで引き続きお楽しみください
ぼうやだからさ
暗号化アルゴリズムの一種でしょ
どんなスレでも糞スレの雰囲気を漂わせるからねぇ。 ある意味すげーけど。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
WinnyのBBS機能に期待が広がったりしたりしなかったり。
そもそも管理者が素直に削除してれば良かったんだろ? 会社から削除依頼あったのに、無視してる時点で社会人失格! 2ちゃん失格! で、今更なにを・・・
確か、一時ID検索サイトがあったよね。 日付とIDを入力すると、IPアドレスの上位3組だか、下位3組だかが 表示されるやつ。 全パターンをデータベース化して持ってたらしいけど、 ヒマなやつもいるもんだと驚愕したものです。
レス付ける人間が法律に違反しなければ IP取られても問題ないかと・・・
461 :
デフォルトの名無しさん :03/01/11 14:32
次のバージョンで MPL が正式に取り込まれるっぽいな。
Gurtovoyさんおつかれさまやね
【予告】小学生の登校を狙って・・・
http://live2.2ch.net/test/read.cgi/news/1042035002/ 674 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 23:36 ID:1BXnvYvY
通報する人は、IPはあるので管理者に連絡してくれれば、
「捜査関係事項照会書で照会しますよー」って言ってたて伝えてくださいー。
902 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 23:41 ID:1BXnvYvY
>警視庁の情報提供っていうフォームで通報していいですか?
フォームでもよいかと。
通報者の電話番号とかもきちんとかいといたほうが
取り上げられる可能性高いです。
ホントは110のほうがいいんですが、、
(・∀・)チューボーですよ!
ねぇ、6億超えちゃったんだし どこで見えるのか教えてちょーだいよ。
778
もらい泣き
荒らしキタ━━━━(゚∀゚)━━━━!!!!!!
>しかし その反証の場が 2ch でなくてはならないというのは ? です。 書き込んだ人間に通知することが合理的に可能な方法としては、 2ch上(削除依頼対象のスレ)でやる以外にないでしょう。 後段はいまいち意味不明。発信者の特定は第三者機関からの要請があってから行えば十分な筈ですが?
なんで書けないのかわからないの!
(^^)
んじゃファーストとセカンドの立場がない
メインのリポジトリからupdate中に寝ちゃった。 起きたらPCサスペンドしてて、表示されてた最後のメッセージ見たら 「接続をリセットされました」。 で、もっかいupdateしようとしたら、 サーバーが落ちてるっぽい。 もしかして漏れのせいでつか?
あーあー
476 :
デフォルトの名無しさん :03/01/19 07:32
しっかしみなさん変わったコンパイラ使ってるねえ。 今度はCrayC++だってよ。NetBSDの移植みたいに、 こういうのにリソース食われてライブラリの開発が遅れてるんだな。
漏れのコンパイラはネイティブなぬるぽを扱う事ができます
タバンニメイワクヲカケルナ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人 Ψ
/ ) < >__Λ∩
_/し' //. V*゚д゚)/
(_フ彡 / ←
>>477
Boost使ってる場合、Boost使ってますよって著作権表示しないと駄目?
漏れのせいじゃなかった。
(^^)
boost::tokenizerにstd::istream_iteratorをつっこんだコードが、 gcc3.2、bcc5.5ではコンパイル通らないぞ( ゚Д゚)ゴルァ!と思ってたら VC6で通ってしまった。 世の中わからんもんだなぁ。。。
485 :
デフォルトの名無しさん :03/02/02 03:12
spirit キタ━━━━(゚∀゚)━━━━ッ!!
spirit.hpp一つしかこないよ
いちおー
>>483 のプロジェクトに参加してるんだけど、
英語力が激しくなくて巧く訳せん!!鬱だ。
どうでもいいけど、
>>483 は道化師であるに一票。
ということで、このスレは、今後三日間書き込みがない場合、Boost-jpのグチスレになります。
>>487 似たような書き込みをしてみようかと考えなかったわけじゃないけど、おいらぢゃないよ〜。
・・・まぁ、誰かは知らんが、困ったらあの翻訳者MLででも訊いて、がんばっちくれ。
ワラタ
かくしてグチスレへの道は閉ざされたのであった。チャンチャン
std::auto_ptrの配列版ってBoostにある?
>>491 たしか無い・・・と思った・・・
まぁ auto_ptr コピって
delete => delete []
にするだけでいい・・・んじゃないかな、たぶん・・・
>>492 Boostにすら無いとは・・・。
改造なら、boost::*_ptr/boost::*_array的には、
・auto_arrayに改名
・operator[]を実装
まだある鴨
>>491 「std::auto_ptrの配列版」ならできて、
「std::vector」だとできないことって、なんかある?
>>491 boost::scoped_array ならあるが、代入はできんな。
496 :
デフォルトの名無しさん :03/02/11 02:23
Jamfileってなぁに?
498 :
デフォルトの名無しさん :03/02/11 04:04
JamっていうMakeみたいなツールがあるのですか? 聞いたこと無いけど。
>>491 以下で(不格好だが)なんとかなるかも、と思う。
std::auto_ptr<std::vector<int> > p;
...
std::cout << p.get()[1] << std::endl;
>>497 おぉう、素早い。
なるほど、Perforce Jam → Boot.Jam ですな。
なんだかmakeより使えそうなんだけど、日本語の情報はあんまりネェですな。
英語ドキュメントだけでしばらくがんばってみます。
>>501 きゃはは、なんだそりゃ?素直にvector使えって。
auto_ptrってコンテナの要素として使えるの? C++3版に書いてある標準ライブラリの場合は使うための要件を満たさないとあるけど・・・
>>505 残念ながら、使うための要件を満たさない。
>>507 std::auto_ptr<std::vector<int> >
↑これが「auto_ptrをコンテナの要素に使えるか」と関係あるのか?
ん?それは
>>501 が言ってることで、
>>503 は「素直にvectorを使え」と言ってるから
vectorの要素に使えって意味だと思ったんだけど。
std::auto_ptr<std::vector<int> > を使うぐらいなら、vector<int>をそのまま使えって事だろ。
あ、そういうことか・・・
>>491 の「auto_ptrの配列版」ばかりに目が行ってたよ・・・
borland の5.5.1で試しに使ってみたら大量の「インライン展開できませんですた」ワーニングに鬱。 しかも主目的だったuBlasのサンプルプログラムが走らなかった罠。 該当ファイルをincludeする意外に必要な事ってありますか?
514 :
名無しさん :03/02/14 11:31
boostて、kylix3でもつかえる?
>513 uBlasのサンプルは"pass"だから逝けると思ったのだけど…… 何でだろう……もちっとあがいてみます
1.30.0 そろそろじゃない?
With a help of boost::dynamic_any::call operation (not yet implemented) it's possible to use boost::dynamic_any::any instead of Boost.Function. Though this new solution is less specialized and probably slower then Boost.Function it has one advantage demonstrated in the example below: typedef boost::dynamic_any< boost::mpl::list< boost::dynamic_any::call<void (int &)>, boost::dynamic_any::call<void (double &)> > > flexible_function; // 2 in 1! int main() { flexible_function f; f = ++_1; // increment for int and double int i = 2; f(i); // ++i double d = 3; f(d); // ++d }
520 :
デフォルトの名無しさん :03/02/21 00:14
Boostの日本語化プロジェクトに参加中。 自分が使うためだけに訳すのなら徹底的に手抜きするが、 これはそうはいかない。何人もの人が読むはずだから。 頑張ろう。他にもプロジェクト参加中の方書き込みキボン。
522 :
デフォルトの名無しさん :03/02/21 14:11
>>521 cppllでは最近BDTの話題がなくなってる。
皆翻訳が大変な事に気づいて必死なんだろう。
Boostjp-devメーリングリストもcvsのアップデート情報
だけです。
>>522 妙な直訳和訳が多いね。参加してないから偉そうなこと言えないけど。
>>523 直訳が一番安全なのですよ。内容をよく把握してないのに変に
意訳すると、意味が変わってしまい大変な事に。
>>524 内容をよく把握してない直訳には今までさんざんひどい目に遭わされたぞ。
カンベンしてくれ。
>>525 文脈によって意味が変わる単語も多いしね。
んで結局、原文の該当個所を調べて(和英翻訳)
辞書を引き直す(英和翻訳)という2度手間になってしまうし。
>>525 それは最悪。訳文が意味不明な上に間違った知識まで植え付けられ、
読まない方がマシだね。
>>526 英語は初歩的な単語ほど文脈によってコロコロ意味が変わるから
ややこしいね。
関係代名詞を何回も使い長々とした文になっている場合は、単語を
取り除いてから機械翻訳に掛け、枠組みを把握した後で隙間を埋め
直すという方法を使っている。
#予想通りこのスレはBoost-jpのグチスレになりました。
そんな面倒なことするなら、 最初から全部自分で訳した方が速い気がするが・・・
英語のまま読めばええやん。 たとえ最良の翻訳でも、所詮は劣化コピー。
>>529 1行目はその通りだが
2行目はそりゃ、文学系の文書に使うセリフだろ
>>529 そりゃそうだが、日本語訳をする事により、英語が苦手でBoost
をあまり使いこなせていない潜在的Boostユーザーが増えるの
ではないかという期待があるからこそ訳が頑張れる。
見ないうちに本当にグチスレになっちまいやがった…。。。
閉ざされたハズだったのに…
ぬるぽのご加護がありますように。
Boostハソレトハムエンダゼ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>534
保守ついでに独り言。 boost::variant なかなか面白そうだな。
>>529 そんなチミは
哲学・思想書を読むことがあったら
古代ギリシア語やラテン語で読むんだね
俺は翻訳には翻訳の良いところがあると思うけれど、それはそれとして、
>>537 古代ギリシア語やラテン語で書かれた哲学・思想に
興味があるなら、そりゃ当然だろ?
>>538 チミはどうして古代ギリシア語やラテン語を知る前から、
その哲学や思想に興味をもつことができるんだい?
>>538 しかしBoostのドキュメントが英語で書かれていると言っても、
BoostそのものはC++で書かれているので、別に英語を知らなく
てもよいじゃない?
わざわざこのスレで話す内容かよ・・・<英語云々
Boost-jpを語らずしてBoostを語るなかれ。
>>539 1.31、に入れるかどうか現在MLで投票中なりよ。
boostのyahoo!groupsの置き場にあるので見てみるとよいかと。
>>540 例えば自分の好きな小説のモチーフとして、ダフニスとクロエが使われている
ということを知ってギリシャの古典に興味を持つとか、論理学の勉強をしてて
流れとして触れられたプラトンのイデア論について深く知りたいと思うとか、
あるいはそんな回りくどくなくても、高校生の時分に倫理の授業で知って、でも何でも。
別に「原典の翻訳」を読まなくても、幾らでも興味は持てると思うけど?
>>541 そうそう、同意。ライブラリのドキュメント、なんつーのはその面で、
原文を読むのも(間違いのない)翻訳を読むのも同じ価値があると思う。
だから、速く簡単に読めるようになる和訳が非常にありがたいケースだ。
# それと比べて、哲学だの思想だの文章とは全然毛色が違うだろ、と。
boostを仕事で広く使えるよう、またそのために広く認知されるには 翻訳されたドキュメントが不可欠。何もやっていない香具師が横から 口出すのはウザイ。>529みたいなのを言うのはPC-UNIX系だけかと 思ってたけど、こんなところにもいたか。英語をそのまま読むのが 一番なのは事実として、でもそれでは認知されるのも限界があること も確かなんだな。
>>544 そんな漠とした興味のところから
すぐにラテン語を勉強しようということになるのかニャ〜
スープを味わうのに何も舌をやけどする必要はない。
>>529 みたいなのはどこにでもいる。
この前ソフトウェア板で見た。
あー、なんか誰かの気に障るようなことを書いたのかも知れないけど、
あたしゃ
>>525-528 あたりの流れに対して素朴な感想を述べたまでで、
特にBoostの翻訳プロジェクトに対して言及したわけじゃないよ。
日本語ドキュメントがあること自体は
>>545 の指摘通り有益なことだし。
>>546 そう言われても、実際俺はドイツ語とギリシャ語はそんな流れで
勉強したのでなぁ、と答えるしかないのだが。
つーか、水掛け論にしかならんしboostに関係ないし。。。
勉強したと逝ってるだけで、モノにしたとはいってないから自慢話とは限らない罠
553 :
デフォルトの名無しさん :03/02/27 00:58
ところで、boost を intel c++ compiler 7.0 で使ってる方 いらっしゃいませんでしょうか?どのくらい使えるんでしょう? boost の web には icc6@win2k のテーブルしか載ってないのですが…
554 :
デフォルトの名無しさん :03/03/03 00:03
boostのライセンスはどうでしょうか? 他のライセンスのものとまぜるとどうなるのか、 libpthreadよりも興味があります。
>>554 >>338 // 「どう」という日本語は曖昧すぎて答えづらいので、もっと
// 具体的に書いた方が望む結果を得られる確率が上がります。
Regex++ですけど、\Zが文字列末尾以外の改行の直前でもマッチしませんか?
557 :
デフォルトの名無しさん :03/03/04 00:32
正規表現とターゲット文字列とマッチフラグは?
このソースです。 #include <iostream> #include <boost/regex.hpp> int main() { using namespace std; boost::RegEx r("a\\Z"); cout << (r.Search("a\nb") ? "match" : "not match") << endl; return 0; }
ぐおー cvs って -P 付けないと追加されたディレクトリを update して くれないのかぁっ!!知らなかった・・・ spirit とかいつまで経っても spirit.hpp しか無いからおかしいと思って いたんだが・・・ スレ違いスマソ
560 :
デフォルトの名無しさん :03/03/06 00:58
stlpor使ってんだけど boostコンパイルする場合 必ずiostreamはstlportの方をコンパイルして使う必要があるのですか?
んなこたーない。
562 :
アシュル ◆adhRKFl5jU :03/03/06 01:14
563 :
デフォルトの名無しさん :03/03/06 01:58
<<558 バグッポ。 正規表現が"a\\n*"でもマッチしてるし。 Boost-Users行き。
564 :
デフォルトの名無しさん :03/03/06 02:15
訂正。 "a\\n*$"
boost はどういうところがいいですか? たとえば標準 C++ライブラリにない 便利な機能だとか、ここが優れているとか。
566 :
デフォルトの名無しさん :03/03/06 03:28
VC6-stlportのメイクファイルはあるけど vc7+stlportで使ってる場合はどのメイクファイルでコンパイルすればいいの?
>563 げえ、RegExバグ付きかよ。 これから先何を信用すればいいんだ・・・。 ところで、このスレと関係ないけどpcreってどうすかね? Perlコンパチ正規表現ライブラリだそうで。 日本語使えないっぽいけど。
>>567 pcreは、マルチバイト関連は一応UTF-8にのみ「実験的対応」というステータス
らしい。詳しいことはしらないが
character classにはASCII文字しか指定できなかったり
そもそもUTF-8を使っておきながら、文字分類をUNICODEの定義ではなく
古典的なctype.hによっているため
「一応マルチバイトも意識はしてます」というレベルだと思われ。
apacheは以前はHenry Spencerの版にebcdic対応パッチを当てた
ものを使っていたが、最近はpcreを使ってるみたいね。
oniguruma はどうよ? 前、C++ 関連の ML で見た記憶が。
570 :
デフォルトの名無しさん :03/03/06 21:33
VC6-stlportのメイクファイルはあるけど vc7+stlportで使ってる場合はどのメイクファイルでコンパイルすればいいの?
571 :
デフォルトの名無しさん :03/03/07 01:00
regex++のバグ(疑)、boost-usersに投げられ。 注目。
zipとはいえ、ついに10MB超えたか。
>>573 落として解凍してみたけど、ドキュメントの1.29から変更したファイルだけ
タイムスタンプが変わっているのでありがたい。すぐわかる。
#Boost-jp の訳頑張っています。もうラスト・スパートに突入って感じですね。
576 :
デフォルトの名無しさん :03/03/11 02:01
ていうか、Boost-jpって需要あるのかなぁ? ぬ る ぽ。
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>576
ぬ
>>576 る 漏れとしてはLet's Boostがあれば十分だ。
ぽ
正直、英語読んでも日本語読んでもよく分からないんで 使うときはソース読んでまつ
Boost-jpあれば、今まで英語のDOCを読むのが嫌でBoostを使う気に なれなかった日本人が何人か使い出すかもしれない。俺的にはそれで 十分。
タテケンサク
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>578
bjamがようやっと、うごいたーーーーーー。 俺の環境(windows2000、 vc6)だと まず、ダウンロードしてきたbjamがうまく動かない。ダメポ。 で、bjamビルドする。attribはコマンドじゃねーよって言われて、ハアァ?。 C\WinNT\System32 をコンパイラ時の環境設定(VCVARS32.BATのパス)に入れる。ていうか、デフォルトで動いてください。 windows2000で使えないかとおもったよ。 ビルドした、bjam使ったら、うまくできました。 めでたし、めでたし。
583 :
デフォルトの名無しさん :03/03/13 03:26
class c_error : public std::runtime_error { public:     c_error( const std::string& when , int c_errno ); }; void f( const char* name ) {     if( std::remove( name ) != 0 )     {         throw c_error( "remove" , errno );     } } ↑のようなコードでは、removeによって設定されたerrnoが、 c_errorのコンストラクタに渡る保証はありますか? std::string::string(const char*)の実装、引数の評価順によっては、 まちがったerrnoが渡ってしまう可能性があると思ったのですが・・・。 Boostとなにが関係あるかっていうと、boost::filesystem内で 例外を投げるコードがこんな感じになってまして。
585 :
デフォルトの名無しさん :03/03/14 09:40
VC6SP5、StlPortでfilesystemのpath_test.cppがビルドできないよー。 リンク中... path_test.cpp.obj : error LNK2001: 外部シンボル ""public: __thiscall boost::filesystem::path::path(class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const &)" (??0path@filesystem@boost@@QAE@ABV?$basic_string@DV?$c har_traits@D@_STL@@V?$allocator@D@2@@_STL@@@Z)" は未解決です っていう、エラーが9つでる。 ちなみにライブラリ(マルチスレッド、スタティックリンク版だと思う、、、、)をいれないと、 エラーが25個くらいでるでつ、まーあたりまえといえばあたりまえだが。 あと、レッツブーストのページのソースをビルドするとこんなエラーが、、、 error C2504: 'basic_ofstream<char,class _STL::char_traits<char> >' : 定義されていない基本クラスが宣言されています。 コンパイルされたクラスのテンプレートのインスタンス化 'boost::filesystem::basic_ofstream<char,class _STL::char_traits<char> >' の参照を確認してください error C2678: 二項演算子 '<<' : 型 'class boost::filesystem::basic_ofstream<char,class _STL::char_traits<char> >' の 左オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照) error C2039: 'close' : 'basic_ofstream<char,class _STL::char_traits<char> >' のメンバではありません。 cl.exe の実行エラー filesystem_2.exe - エラー 3、警告 0 なんでーーーー?
>>585 ドキュメントを見る限り、filesystem::fstream は VC6では
はねられるように読めるが。
587 :
デフォルトの名無しさん :03/03/15 09:40
>>586 thx。確かに使えないと書いてあるっぽい。
でも、
__thiscall boost::filesystem::path::leaf(void)const " (?leaf@path@filesystem@boost@@QBE?AV?$basic_string@D
V?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@XZ)" は未解決です
って、 boost::filesystem::path とか、他のでもでるんですよね、、、
で、bjam悪いのかと思って、VC6でビルドしてみる。filesystemを除いてビルドしてみる。
stlport使わないでビルドしたライブラリ使ったら、リンクエラー。
exeのほうもstlport使用しないようにしたら途中でアボン(まぁ当たり前かな?)。
で、stlport使用でビルドしてみる。キターーーーー、うまくいったよーーーーー。やたーーー。
ちなみにstdafx.cppにソースをインクルードしてみましたが、これでよろしいのでしょうか?
他に、makefile使わないで作成する方法とかありますでしょうか?。
>>583 規格を読んでくとstd::allocatorがerrnoを変えない保証とかが
実はあったりするのかもしれんが、確かにぱっと見まずそうだな。
boostのMLに投げてみたら?
>>588 「boostのMLに投げる」って簡単?
Boostのサイトからいろいろ辿ってみたら、
結構めんどくさそうでしたが。
基本的に英語の読み書きがメンドクセェってのが多分にありますがね。
590 :
デフォルトの名無しさん :03/03/15 19:20
1.30のリリースの予定はもう決まっていますか?
591 :
デフォルトの名無しさん :03/03/16 04:43
boostって遅いって聞きますが、実行時の速度重視なゲームプログラミングでも 十分実用的に使えますか? 使っている人ってどのくらいいますか? 大丈夫ならこれを機に移行してみたいのですが。
いみがわからん
>boostって遅いって聞きますが え?マジですか?
ゲームのコアルーチンでlambdaとか使ったら遅そう。
595 :
デフォルトの名無しさん :03/03/17 12:00
>>591 何を基準に速いとか遅いとか言ってるのかわからんが、
専用に作った物の方が汎用の物よりは速いと考えるの
が一般的だろう。
ヘタレの作った専用ルーチン vs 大ベテランの作った汎用ルーチン
だと、良い勝負だろうけど。
コンパイルは遅いよね
速度重視なゲームプログラミングっつても、 ゲームにはファミコンレベルからPS2レベルまであるわけだし、 Pentium 90Mhzぐらいでも速いといわれていた時期もあるわけだし、 boostと専用のものとじゃ100Mhzも処理速度の違いなんて無いだろうし、 そんな適当な説明じゃ実用的かどうかなんて判断できません。
598 :
デフォルトの名無しさん :03/03/17 15:10
あとエラーメッセージはわけ分からんね それから正直、プリプロセッサーメタプログラミングは 別にコジェネ書いた方が楽だね
正直、boostは俺以外使わないでほしい みんなが使うと俺の優位性がぐらつくだろうが!!
boost 1.30.0 age
キタ━━━━━(゚∀゚)━━━━━!!
603 :
デフォルトの名無しさん :03/03/21 09:54
boostはshared_ptrしか使ってないのですが、もうちょっと使えるように なりたいので、勉強してみます。 次に何を使うといいでつか?
scoped_ptr noncopyable bind any この辺か?
オィオィ、普通に考えたら spirit 辺りが妥当だろ
何を作ってるかにもよるが、数値計算な俺的には uBLAS に一票。
608 :
デフォルトの名無しさん :03/03/21 16:19
C++使いは手当たり次第に外部ライブラリ試している暇があったら 一度は費用対効果というものを真剣に考えてみる必要がある。 習得コストや可読性を考えるとほとんどの開発者が コストを回収しきれていないのが現実。 そのコストを貴重な休日で穴埋めしたいならそれでもいいけどさ。
げげっ1.30がリリースされてる。 Boost-jpやり直しか?今タイムスタンプをチェックしてる。 結構変わってるね。
>>603 次は MPL だろ。どー考えても。
>>608 仕事では使ってないよん。あくまで趣味。
っつーか仕事は VC++6.0 なので・・・
VC++6.0 で lambda を使うにはどうしたらいいですか?
612 :
デフォルトの名無しさん :03/03/25 12:56
すまないけど、次期lexical_castに関する情報へのリンク等を教えてもらえない? 英語が良くわからないので検索してもサッパリ。
613 :
デフォルトの名無しさん :03/03/25 13:11
ここでlambdaとかcompile timeとか騒いでる奴は、一度MLやってみて欲シイ。 素質アリダヨ。 MLつってもメーリングリストじゃないよ。Meta Language。
614 :
デフォルトの名無しさん :03/03/25 13:14
ステップ実行し、変数ウォッチすればわかる。
namespace fs = boost::filesystem; fs::directory_iterator end; fs::directory_iterator it(fs::current_path()); while(it != end) { std::cout << "."; ++it; // ←ココ } VC6、マルチスレッドでコンパイルすると ++it が 処理を返さなくなるけど、これは仕様ですか? >585 VC6でfilesystem::fstreamを使うなら、 std::basic_ofstream<char, std::char_traits<char> >(); を最初に挿入しとくと通るよ。
>>613 Boost使いには意外と関数型言語使いが混じってるんじゃないかと思う。
私はHaskell知ってからBoost知ったクチだし。
>>616 マジThx!
つーか1.30になってからlexical_castのドキュメント変わってるとマズイことに。
何故かは秘密♥
1.30にしたら #define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS しないとエラーが出るようになった。VC7。どうして?
>>615 THX !! あらかじめ、インスタンスを生成しとくのね!?
グローバルで定義したり、boostの中に書いてみたり、使用クラスのなかで宣言してみたり
typedefしたり、うまくいかないでガセか?と、おもったけど、使用する関数で宣言すれば通るのね。
date_time入れて、便利そうだから、greg_day_of_week使おうと思ったら 使えない。。 よく見ると、ドキュメントに記述があるのに、ヘッダファイルには痕跡がないし。 後、pathも使おうと思ってたのに、path::path()からして動かない。 vc6のせい? ドキュメントに使用が書いてあるのに、実際には、まだ開発中って 珍しくないこと?
コンパイルした?
続き。 コンパイルして、libファイル作って、 リンクもさせているはずなのに。 リンクのさせ方が変なのかなあ? vc6+sp5です。 ちょっと出ていました。すみません。
「使えない」とか「動かない」とかしか言わないってことは、 エラーメッセージは出ないのに、実行してみると動作しないってことだよな?
説明不足で申し訳ないです。 greg_day_of_weekは宣言されていないというエラー、 pathに関してはリンカエラーが出ます。
>>627 boost::gregorian::greg_weekday
pathのほうは、リンクのさせ方が変なんだろうな。
依然としてエラーの内容はわからんがな。
質問するなら、エラーメッセージをそのまま貼り付けるのがベストだ。
vc6,sp5,windows_sdk_coreアップ済みのヘッダー使用ですが、 boost::filesytem系は動いてますよ。 bjamで作ったlibはリンクエラーでまくったので、自分でlib作成しましたが。 stlportのiostream使ってるかどうかで、リンクエラーでたりするのがうざい。 regex++みたいに、自動でライブラリやdllをいっぱい作成して、コンパイル時に適当なlibwo 選んでくれるようにデフォルトでならないかな・・・。
>>628 greg_weekdayなんですか。
気づかなかった。。。
書き直したら全部うまくいくようになりました。有り難う。
filesystemの方は、
test.cpp
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
string pathName = (LPCSTR)GetDocument()->GetPathName(); // データファイルのパス
for ( size_t i = 0; i != pathName.size(); i++ ) {
if ( pathName[ i ] == '\\' ) pathName[ i ] = '/';
}
boost::filesystem::path dataPath( pathName );
というソースで、
test.obj : error LNK2001: 外部シンボル ""public: __thiscall boost::filesystem::path::path(class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const &)" (??0path@filesystem@boost@@QAE@ABV?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@@Z)" は未解決です なんていうリンクエラー。 629さんの言うように、libを自分で作らないと行けないのかなあ。 環境は、VC6+sp5+stlport4.5.3で、STLportのiostreamを使用。 bjam "-sTOOLS=msvc-stlport" "-sBUILD=debug release <runtime-link>static/dynamic <stlport-iostream>on" でやってみて、生成物を[プロジェクト]→[設定]の [リンク]→[オブジェクト/ライブラリモジュール],[追加ライブラリのパス] で呼ぶようにしてるんだけど。。
俺もbjamで作成したら、それと同じエラー出たよ。 でも自分でlib作成したらでなくなったけどね。 ところで、stdafx.hを使うプロジェクトでlib作成するときってさ、 stdafx.cpp に boost のソース を#include <boost/filesystem.cpp>とかしても問題ないのかしら? (と、昔書いたが放置、、むしろ、VCスレで聞け?)
>>631 それって、ライブラリのビルドのときにSTLport使われてんの?
>>633 if "%OS%" == "Windows_NT" set PATH=%MSDevDir%\BIN;%MSVCDir%\BIN;%VSCommonDir%\TOOLS\%VcOsDir%;%VSCommonDir%\TOOLS;%PATH%
if "%OS%" == "" set PATH="%MSDevDir%\BIN";"%MSVCDir%\BIN";"%VSCommonDir%\TOOLS\%VcOsDir%";"%VSCommonDir%\TOOLS";"%windir%\SYSTEM";"%PATH%"
set INCLUDE=%MSVCDir%\Include\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
set VcOsDir=
set VSCommonDir=
set STLPORT_PATH=%MSVCDir%\Include\stlport;
というように環境変数を設定した後に、
bjam "-sTOOLS=msvc-stlport" "-sBUILD=debug release <runtime-link>static/dynamic <stlport-iostream>on"
とやれば、使われるはずだと思っているのですが。
>>632 有り難うございます。
pathもサンプルプログラム(MFC/SDIを使用)ではうまく動作するようになりました。
まだメインの方ではうまく動きませんが(リンクはできるけど、実行時エラーが出る)、
そっちは別の問題のような気がするので、後で見てみます。
>ところで、stdafx.hを使うプロジェクトでlib作成するときってさ、
>stdafx.cpp に boost のソース を#include <boost/filesystem.cpp>とかしても問題ないのかしら?
Win32 Static Libraryでlibを作ったので、何とも。
635 :
デフォルトの名無しさん :03/03/31 23:58
>>634 それじゃだめだとおもう。
↓ tools/build/msvc-stlport-tools.jam から引用
"Set STLPORT_PATH to point to the directory _above_ the STLport directory."
というわけで、VCにインストールしたパスじゃなくて、
STLportのパッケージを展開したパスの一つ上を指定するらしいぞ。
指定の方法は他にも何種類かあるみたいだから、
tools/build/msvc-stlport-tools.html も見といたらいいと思う。
sageでやる話でもないのでageとこう。
636 :
デフォルトの名無しさん :03/04/01 02:35
634じゃないけど
>>635 煽るわけじゃないが、それでうまくいくの?
stlportのひとつうえ指定したら、stlportのディレクトリ名変更してたら探せないようなきがするんだが、、、、
ひょっとして、バージョン情報ついたディレクトリ名を変更したらいけないのかな?
明日余裕あったら試してみるかな、、、
>>635 で引用した文の直後にこの文(↓)が続いてる。
"This assumes that you didn't rename the STLport folder and allows for automatic selection of multiple STLport versions."
端折るくらいなら引用しない方が良かったかもな。
というわけで、引用などあてにしてないで、自分で読めってこった。
boost使いを、ブースターと呼ぶ
639 :
VC6 + STLPort :03/04/01 11:39
#include <string> #include <boost/lexical_cast.hpp> using namespace std; int main() { using boost::lexical_cast; string str_thousand = "1000"; int int_ninety = 90; inta = lexical_cast<int>( str_thousand ); strings = lexical_cast<string>( int_ninety ); return 0; }
640 :
VC6 + STLPort :03/04/01 11:40
E:\TMP_PROJECT\stlport\main.cpp(13) : error C2062: 型 'int' は不要です。 E:\TMP_PROJECT\stlport\main.cpp(14) : error C2275: 'string' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。 d:\vs6\vc98\include\xstring(612) : 'string' の宣言を確認してください。 cl.exe の実行エラー って出るんですけど、何が悪いんでしょうか?
641 :
デフォルトの名無しさん :03/04/01 12:06
>>639 lexical_castの前にboost::をつけるか
using namespace boost;
をつけてみたら?
642 :
VC6 + STLPort :03/04/01 12:12
>>641 warning C4800 が出ましたが無事動作しました。
これは面白いですねぇ・・・仕事でも使いてぇ〜(w
>>642 上司説得しようぜ。
うちの場合、「便利なものあるんならどんどん使っていいんじゃないの?無料なら。」
といわれたので、使っておりますー。
>>642 C4800って非bool値をbool型の変数に代入しようとした時に出る
んじゃないの?まだ怪しい部分が残っているような・・・・業務では
使わない方が吉。
ちなみにBCCやgccではそんな警告は出ないから、VC6の問題であると 思われる。VC6に対応させるためのworkingaroundが随所に見られ、 その当たりにバグが残っているかもしれない。
>>643 うちは「フリーのやつは、バグがあった場合の責任問題が云々」という理由で却下されますた。
647 :
デフォルトの名無しさん :03/04/01 13:03
>>646 実際どうなんだろ。
VCのバグのほうは事実上どうにもならないが(大金払えば別だろうが)
フリーのSTLPortとかなら対処可能だよね
直すという結果が重要ではなく、責任をなすりつけるのが目的だとしても
MSは使用許諾で免責しまくりだよねえ・・
648 :
デフォルトの名無しさん :03/04/01 13:26
やっぱ bjamで作ったlibを vc6.0 sp5 stlport で使用できない・・・。 だれかうまくいった人、環境設定とコマンドの例をおしえてください。 bjam使うなってことですかね?
650 :
VC6 + STLPort :03/04/01 14:33
うっ・・・・
>>639 のコードを
>>641 修正済みでVC7+STLPort
でビルドしたらエラー
d:\VS.NET\Vc7\boost\boost\lexical_cast.hpp(45): error C2039: 'bad_cast' : '_STL' のメンバではありません。
ううむ・・・
651 :
デフォルトの名無しさん :03/04/01 14:43
>>650 #include <exception>//例外のクラス?
ていうかstlportへパス通ってる?
652 :
VC6 + STLPort :03/04/01 14:49
パスは通ってます。include と lib
>>651 bad_cast は <typeinfo>
>>647 問題の原因を拡散させないのが大事なんじゃないかと。
だれもMSに責任を取ってもらおうなどとは考えてないよね。
まあ次のVC++でメジャーなテンプレートライブラリに
かなり対応する予定だとか。たのしみですけど。
655 :
VC6 + STLPort :03/04/01 15:01
657 :
デフォルトの名無しさん :03/04/02 15:28
658 :
デフォルトの名無しさん :03/04/02 15:32
boostのコンパイルを速くするにはどうしたらいいですか? VC++ならpchが効くんでとっても快適なコンパイルができるんですが、 gccだとふざけたほど時間がかかって困ってます。 ccacheもあんまり効果無いし。
>>660 ・速いマシンを買う。
・cvsからcurrent(3.4)を取ってきてpchのテスターになる。
(gcc/gcc/c-pch.c,cpppch.cあたりか?頑張って!)
662 :
デフォルトの名無しさん :03/04/04 03:26
あ、こんなところに宣伝が。 フィードバックほしいです、はい。 ソースフォルゲのバグトラッキング(要メールアドレス)か、 cppll-bbs@したらば(まあ匿名)でお願いします。 別に、原文と照らし合わせてくれ〜、とまでは言わん。 変な日本語とか、意味がわからないところとか、指摘していただけたら幸い。 むしろ、原文でも意味がわからんところもあったりするががが。
そういえば、boost::poolが使えるかどうか実験してみたんだけど 10000回くらいmalloc,free 繰り返したらがはっきりと差が出てくるね。 お手軽に使いたい場合ちょこっと便利かも。 ただそんなに大量に細かいオブジェクトを生成破棄する機会がいまのところないんだけどね、俺の場合。
boost::poolってstd::list等のコンテナのメモリアロケータにも使えるのですか? 1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、 速くなりますかね?
>>666 使えるかどうかとどのように使うのかを聞いてるんですが…
>>664 普通のmallocとかnewとかを生成、破棄するのに比べて速い。
>>665 日本語ドキュメントにはstd::vectorとかコンテナでも使えるみないなことかいてあったよ。
ただ、普通に使うのとちがってプログラム終了するまえにsingletonオブジェクトから
明示的に開放しないといけないっぽいらしいけど。
読んでみたら?
>1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、 既に設計がおかしい様な・・・
>>665 どんなゲーム内容だよ、それ
シューティングか?
boost::poolとstd::mallocでdouble型のインスタンスを500000回生成して 速度を比較してみたよ。 malloc = 2231874 boost::pool = 1371511 short型でもやってみた。 malloc = 2181766 boost::pool = 1132248 コンスタントに2倍程度の速度が出ている。
>>671 (((( ;゚Д゚))) ガクガクブルブル
>>671 こんなのできるやついるんだな_| ̄|○
ライフ制をなの発見して、ちょっと安心( ´∀`)
将来、戦闘機が遠隔操作とかになったら、エリートになれそうだな。
まぁ、今はただのオタだが…。
>>672 GJ!!
>>672 ・・・この結果ならそんなにつかう必要性を感じないなぁ
つーかそんなベンチやっても差はあんまり開かんだろ。 実際の運用を想定してmallocの方をある程度断片化させないと。
>>675 boost::poolのコンストラクタにいちいちサイズを指定しなければ
いけないのが面倒。
boost::pool<> pl(sizeof(double));
こんな感じ。
サイズを固定化して速度をあげているような気がする。もちろん
テンプレートパラメータに型を指定すればサイズの指定は必要
ないが、doubleやintのような基本型を指定するとエラーになる
のが問題だ。
>>672 環境は?
mallocの実装がしょぼい環境でこそ、威力を発揮するだろうからな。
最近のOSなら、boost::pool相当のことはOS内部で既にやってある可能性もある。
>最近のOSなら、boost::pool相当のことはOS内部で既にやってある可能性もある。 更に言うと、malloc内部でも同じ事をやっている可能性があって boost::poolを使うと3重に無駄なことをしていると言うことにもなりかねない
つーかね、バウンダリに収まるオブジェクトでテストしても効果無い。 断片化させた上で、16byte以上のオブジェクトで試せ。
>1/60秒ごとにlist内の数百〜数千のインスタンスを生成・破棄したりしてるんですが、 どんなん作ってんねん。1/60秒ってことはゲームなのだろうが、 たとえ弾幕シューでもそんな激しい頻度にはならないっしょ。
「1/60秒」って言葉を使いたかっただけかと(藁
ピクセル毎にオブジェクトで管理
パーティクルアニメーションとか
パーティクルならありそうだ でも、作り方を見直したらboost::poolに変えるよりも数倍は早くなりそう
688 :
デフォルトの名無しさん :03/04/11 22:25
VC7+STLport(iostreamビルド済み)で使ってるんですが 今度Boost::regexを利用しようと思うんですが、 makefileはvc6-stlport.makとvc7.makと有るんですが STLport使いつつBoost使いたいのですが どのメイクファイルでコンパイルすればいいのでしょうか?
VC7+STLport(iostreamビルド済み)で使ってるんまるちー 今度Boost::regexを利用しようと思うんまるちー、 makefileはvc6-stlport.makとvc7.makと有るんまるちー STLport使いつつBoost使いたいのまるちー どのメイクファイルでコンパイルすればいいのでしょうかまるちー?
エロゲーヲタはカエレ!
おまいら面白いな
VC7+STLport(iostreamビルド済み)で使ってるんだにょ 今度Boost::regexを利用しようと思うんだにょ、 makefileはvc6-stlport.makとvc7.makと有るんだにょ STLport使いつつBoost使いたいにょ どのメイクファイルでコンパイルすればいいのでしょうかにょお? ---- g++ 3.2.2 使ってるんだけど、STLport 入れた方がイイ?
vc6 に stlport いれたら loki のSmartPtrコンパイルできんかった。
__ , ────── 、__
, - ':::::::::::::::::::::::::::::::::::::::::::::::::::\
/ ;;;;;;;:::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;\
/,,;,,,,, ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,,,,,,,,;::::::丶
/ :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::::::ヽ
i゙:::;:::::||::::::,!i:::::::::::,|i::::::::::::::::::;:::::::::::::::::::::::::::::::゙i
i゙::::|;;;;| |;;;;;| |::::::::::| |:::::::::::::::::||::::::::::::::::::::::::::::::::|
. i゙::::::i ''''''''''' '───' |;;;;;;;;;;;;::::::::::::::::::::|
.|:::::::|,-====-´ ゙ヽ,,,,,,,,,,,,,、 |:::::::::::::::::::|
|;::::::::|,-──、 ~,.--`‐、 |:::::::::::::::::::|
`ヽ、i )__r'´ )__|;::::::::::::::/
. ヽ、__、/< ヽ、__、- /^゙-、;;;;/
>>691 おもろないよ
{ ' ' '-'~ノ
λ ____ /-'^"
ヽ,_ `ー─''´ (
/`''丶、 , - /^l
/ /( ノ `'''''''´~ _, - ' ~ ゙i、
{ / /| ̄ ̄ ̄ ̄ _,-'^¨ }
{/ / ゙ー────'~ \|
/ ヽ \
>>697 それだけを言うために、AAなんかはってんじゃねーよ、糞ボケがーー。
699 :
デフォルトの名無しさん :03/04/13 14:05
火垂るの墓の節子?
701 :
デフォルトの名無しさん :03/04/13 15:16
C++とjavaではドッチが偉いの?
702 :
デフォルトの名無しさん :03/04/13 16:32
つーかそんなネタに反応するなよ>702
>>703 ごめん、他人の糞ネタを一番つまらない方法でさっさと消費するのが
最近のマイブームなんだ。
言い訳レスもいらん。702はゴミ。
という放置できない厨のせいで駄レスがさらに増えるのであった(w
なんなの・・・この駄レス・・・
もうどうでもいいからやめろ。 しつこすぎる。
>>710 いやー、そういうこと書いちゃ終わるもんも終わらないでしょーw
まったく馬鹿ばかりだ。 俺は悪くないぞ。
俺も全然悪くないぞ。
だれか、俺にかまってくれよ〜
C#
>>716 既出もなにも、boost.org のトップページからリンク張ってあるしなぁ。
boostを初めてインストールして適当なものを書いてみようとしたのですが #include "stdafx.h" #include<string.h> #include<vector> #include<algorithm> #include<mbstring.h> using namespace std; #include <boost/regex.hpp> の状態でstrlen,strcatなどを呼ぶと error C2668: 'strlen' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) がでてしまいます。 回避方法ご存じの方教えてください。VC++6sp5です。
719 :
デフォルトの名無しさん :03/04/15 12:22
#include<string.h> ↓ #include<string>
strlen, strcat を使うのなら cstring じゃないのかと小一時間。 ていうか boost 関係ないやん…(;´Д`)
721 :
デフォルトの名無しさん :03/04/15 14:56
ところで、boost::regexのライブラリ名で'i'ついているやつありますよね? 例:boost_regex_vc6-stlport_mdi.dll ↑これ このiってdynamicとdebugの'd'がならんでついてると気持ち悪いから dyの発音からdとってiなんですかね? それとも別な意味あるんですかね?
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
724 :
デフォルトの名無しさん :03/04/21 19:33
保 守
>>721 iはcase-insensitiveのi。
>>725 信じていいですか?じゃー、ここがsの時はsensitiveかな?
727 :
デフォルトの名無しさん :03/04/29 12:42
AGE
728 :
デフォルトの名無しさん :03/05/13 21:46
boost::weak_ptr の仕様が1.3.0から変わってうかつにコンテナにいれたら泣くとか、 boost::filesystem をはじめとしてダブルバイト文字対応が弱くて泣くとか、 泣き言っても良いですか age
>boost::weak_ptr の仕様が1.3.0から変わってうかつにコンテナにいれたら泣く、 まじっすか?どうなるんですか? つーかいまのところ、コンテナにweak_ptrいれてないから安心だ。
730 :
デフォルトの名無しさん :03/05/14 12:03
boost::thread_groupの実装にstd::listが使ってあって、 挿入・削除のときにstd::find(begin(),end(),...)してあるんだけど、 std::setを使わないのはなんでだろう?
BCC5.5だとboost/integer.hppのboost::uint_value_t<Max>がMaxに関係なくunsigned longになってしまう…。 g++だと思ったとおりになるから、バグかな。 using boost::uint_value_t; std::cout << sizeof(uint_value_t<1>::fast) << std::endl; std::cout << sizeof(uint_value_t<300>::fast) << std::endl; std::cout << sizeof(uint_value_t<30000>::fast) << std::endl; std::cout << sizeof(uint_value_t<60000>::fast) << std::endl; //std::cout << sizeof(uint_value_t<100000>::fast) << std::endl; // BCCだとコンパイルすら通らない
>>729 1.30.0 の weak_ptr には比較演算子が operator< しかないから、
weak_ptr のコンテナに対して、std::find や std::remove などの
汎用アルゴリズムを専用ファンクタなしに呼び出すとコンパイルエラー
つーか、weak_ptr は operator->() も operator*() も無いんだから、
weak_ptr という名前はやめたほうが良いんじゃないかとも思う。
>>732 ありがとん。
まぁ確かにlockしたり、shared_ptrにわたしたりすんのめんどくさいかも。
結局、boostは商用のクローズドなプログラムに利用可能なんでしょうか? 過去ログ見たんですが、結論出ていないっぽいですよね… 可能ならバイト先のコードに使いたいんですが、皆さん商用プロダクトで使った りしてますか?実際のところどうなのでしょう?
漏れも使ってるんで大丈夫です。バイトだけど。
このスレでは俺が法律だ。
738 :
デフォルトの名無しさん :03/05/18 23:40
>>734 バイト先のプロジェクトの責任者に聞くべきじゃネーの?
それで何で利用不可能なの?
boostのライセンス的には要するに問題なしってことだな 後はプロジェクトマネージャーが使用許可くれるかどうかぐらいか その辺の裁量も自分にあるならとっとと使えばいいし
>740 改変型バークレーライセンスとか言うやつだっけ?
皆さんどーもです。特に
>>739 サマ。
いやぁ、バイト先が小さい会社なんで、プロジェクトマネージャーとかそんな
のいなくって、むしろ実質僕がそのソフトの責任者みたいになってるんですが、
下手に外部ライブラリ使うと商用だとヤヴァイかなぁと思いまして。
一応自分でも調べてたんですが、自信が無かったものでして。
リファレンスカウントとかfilesystemみたいなのとか自前で一応作ってたんで
すけど、なんかちょっと自作のが怪しくなって来たんでこの際boostにしちま
おうかと思った次第でして。さすがにRegexなんか作れないですし。
とにかく皆様ありがとうございましたm(_ _)m。これで大部楽になります。
boostのライセンス条項に同意できるなら、決定権のある君がOKならOKでは。 マルチバイトの処理に怪しいとこもあるので、独自ライブラリのままのほうが いい場合もある。よく検証してから使おうね。 Unicodeとかでいけるなら、boostでいいけど。
744 :
デフォルトの名無しさん :03/05/19 19:05
vc6sp5 stlport4.5.3でbjam使って、filesystemをビルドすると どうがんばってもofstream使用するとエラーでる・・・。 error LNK2001: 外部シンボル ""public: class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > __thiscall boost::filesystem::path::native_file_string(void)const " (?native_file_string@path@filesystem@boost@ @QBE?AV?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@XZ)" は未解決です
stlport使わんかったらうまくいった・・・。 なんでだー。 ていうか俺にどうしろちと・・・。 stlport使いたいんだよ・・・。
>>744 ENVにSTLPORTかなんか追加して、includeディレクトリ設定してやった?
let's boostあたりに書かれてるんじゃないのかな
今手元に設定ないんであれだが、だいたいこんな感じっす [vcvars32.bat] 〜略〜 set INCLUDE=C:\hoge\STLport-4.5.3\stlport; %MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE% set LIB=C:\hoge\STLport-4.5.3\lib; %MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB% set STLPORT_PATH=C:\hoge\STLport-4.5.3 set STLPORT_VERSION=4.5.3 [コマンドプロンプト] bjam "-sTOOLS=msvc-stlport" "-sBUILD=debug release <runtime-link>static/dynamic <stlport-iostream>on/off <threadの設定?>multi.single <デバッグシンボル?>on/off" だれかえらい人、サンプルの設定教えてくださいーーーー。 あと、βのstlportって使えない?
>>748 それ読んでもbjamじゃうまくできねーんだよぅ。馬鹿なおいらをたすけてくれぃ。
>>749 ほぅ、
> set STLPORT_PATH=C:\hoge\STLport-4.5.3
これを、
> set STLPORT_PATH=C:\hoge
こう直してもダメだったわけだな。
>>751 DUMPBIN /SYMBOLS [できあがってるライブラリファイル] >symbols.txt
でライブラリのシンボルとって、symbols.txtの中を"native_file_string"し、
ヒットしたシンボルを
>>744 のシンボルと比べろ。
>>752 ありがとうございます。
[symbols.txt]
native_file_string@path@filesystem@boost@
@QBE?AV?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@XZ
[744]
native_file_string@path@filesystem@boost@
@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ
↑ここが違う
あと_STL となっているところがstdになってる。
stlport使われてないってことでしょうか?
ビルドしなおしてみます
>>753 > stlport使われてないってことでしょうか?
そだねー。
>>750 の変更したときに、古いオブジェクト消してなかった、ってことかな。
うまくいきますた。すいませんでした。 [環境変数] set INCLUDE=C:\hoge\STLport-4.5.3\stlport;略 set LIB=C:\hoge\STLport-4.5.3\lib;略 set STLPORT_PATH=C:\hoge set STLPORT_VERSION=4.5.3 でうまくいきますた。 前回やったとき失敗したのは、たぶん set INCLUDE=C:\hoge\STLport-4.5-0119\stlport;略 set LIB=C:\hoge\STLport-4.5-0119\lib;略 set STLPORT_PATH=C:\hoge set STLPORT_VERSION=4.5-0119 これ 4.5-0119 が原因かも・・・。 それとも set STLPORT_PATH=C:\hoge やってなかっただけかもしれません()。 ところで <threading>multi <stlport-iostream>on" オプション忘れると悲惨ですね。
let's boostは間違ってるの?
STLPORT_PATHしか書かれてないね
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
boost memo が消えターーーーーーーーーーーーーー(゚∀゚)ーーーーーーーー!!! どこ逝ったんだYO!!!
>>760 Let's boost あたりからリンクをたどれ。
762 :
デフォルトの名無しさん :03/06/02 20:25
>>761 アリガトン。
作者さんが進級してアカウント名が変わったっぽいですな。
お騒がせスマソ
The Command Line & Config library by Vladimir Prus has been accepted into Boost. キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
コマンドラインとか設定とかの具体的なライブラリが増えていって、 どんどん自分でコードが書けなくなっていく…
見た。けど、この変態的構文はどういうカラクリでござるか。C++疎くてもう。 desc.add_options() ("help", "", "produce a help screen") ("version,v", "", "print the version number") ("string,s", "arg", "output the specified string") ;
operator() で、自分か自分と同じ型のオブジェクトを返すオブジェクトだね。 こんなかんじ #include <iostream> #include <iterator> #include <algorithm> #include <vector> class Foo { std::vector<int> v_; public: Foo &operator () (int param) { v_.push_back(param); return *this; } void dump() { std::copy(v_.begin(), v_.end(), std::ostream_iterator<int>(std::cout, ",")); } }; int main() { Foo foo; foo(1)(2)(3)(4)(5); foo.dump(); return 0; } 出力は 1,2,3,4,5, になるかな。ためしてみれ
サンプルコードまでありがたい。理解でき申した。感謝いたします。
boostを商用のクローズドソフトウェアに使う→OK これは何度も議論になっているのでいいのですが boostを使って自分で書いたプログラムをGPLに これってOK?
>>769 つーか、それがだめだったらboost使った奴で商用のライセンスを作成できないじゃん。
>>770 dクス。
商用利用は良くても派生不可という可能性もあるので気になっていたのでした。
うぎゃー、filesystem2バイト目が\(0x5c)な文字を使うとだめじゃんかー! ……横着しないで自分で作ろう。 VC++の_splitpathのソースとか見ると_ismbbleadとか使ってちゃんと処理 してるんだよね。そういう風にならないかなぁ。
>>772 BoostをWindows日本語版依存にしろと?
wstringに対応しろって事じゃないの?
パス区切りに\使うなって事だろ。
書き込んだ瞬間に間違ってるのに気付いた。ごめん。
>>773 国際化しろってことでしょ?
_ismbbleadならコードページによって処理が変わるから
日本語依存になるってことはないんじゃないかな。
codeはすでにあるんだから、だれかがsubmitすればよいのでは。 localeを参照するようにするのは、それほど難しいことでないし。
Gurtovoyさんおつかれさまやね
最近 boost-jp に変化が無いのぅ。
じっくり待ちつつ spirit でハクる
>>780 仕事が忙しくて和訳する時間が取れないのよー。
年末は時間があったからどんどん訳していたけどな。
783 :
デフォルトの名無しさん :03/06/24 14:06
boostっていうか、STLにstringってありますよね。 これはASCIIものだけでしょうか。 UNICODEの場合にはどうなりますか?
>>783 stringはSTLっちゅーか標準C++ライブラリかね。
std::basic_string<wchar_t> = std::wstring があるが。
ありますた。
>>784 ついでに、教えて下さい。
RDBから読み取った内容の構造体を定義したいんですが、どんな風に書かれますか?
wchar_t[10];
wstring[10];
[10]が格納できる文字数 or バイト数のつもりなら、 wchar_t[10 + 1] か wstring でいいよ。 wstring/stringは可変の文字列を扱える。 長さチェックを行う文字列を持ちたいなら、もうちょっと工夫しないといけない。
787 :
デフォルトの名無しさん :03/06/24 18:24
>長さチェックを行う文字列を持ちたいなら、もうちょっと工夫しないといけない。 この詳細、超知りたいでつ。
788 :
デフォルトの名無しさん :03/06/24 18:52
>>788 std::wstring ws(256,L'\0');
これのこと
今月のCマガに載ってたね
790 :
デフォルトの名無しさん :03/06/25 00:50
C++Builder6でboostしてます。 #include <boost/tokenizer.hpp> すると、「インライン展開できない」系の warningがボロボロと出ます。該当コードを見ると確かにインライン展開 不可能なコードがあるようです(オブジェクトの値渡しやfor文など)。 やかましいのでwarningを抑止しちゃってるんですが、これって皆さん普通に やってることなんでしょうか?
淫乱展開できるかどうかは処理系依存なんで。 できない処理系がWarning出してても抑制でいいでしょ。 自分で展開しないようにソース書き換えるのは実りが少ない。
淫乱展開(・∀・)イイ!!
class Super{ public: ~Super(){ std::cout << "~Super()" << std::endl; } //virtual ~Super(){ // std::cout << "virtual ~Super()" << std::endl; //} }; class Sub : public Super{ public: ~Sub(){ std::cout << "~Sub()" << std::endl; } }; int main(){ boost::shared_ptr<Super> hoge(new Sub()); return 0; } 結果 ~Sub() ~Super() どっかの日記にかいてあったが、すげーなと思った。
>>793 これに依存したコーディングはしないほうがいいんだろうなぁ。
>>793 何がすごいのか解説キボン・・
boost::shared_ptrがすごいの?
>>795 ↓に変えて実行してみな。
int main(){
std::auto_ptr<Super> hoge(new Sub());
return 0;
}
ヘッダ追ってみた。なるほど。 shared_ptr<T>のコンストラクタが引数の型を自身の型とは別にtemplate typename Yで 受けていて、そのY型のchecked_deleter<Y>を与えてshared_countを作ってるのか。 だから全参照消滅時にはT=Superのデストラクタではなく、Y=Subのデストラクタが起動されるのね。 それと、解体のときにYのものですらなく、別途引数で解体関数を与えるコンストラクタもあるのね。
>>797 ちゃんとshared_ptrのドキュメントに出てたね。
[This constructor has been changed to a template in order to remember
the actual pointer type passed. The destructor will call delete with
the same pointer, complete with its original type, even when T does not have
a virtual destructor, or is void.
...]
つまり、こういうような処理しないで、 コンテナにスマートポインタぶち込むとマズーなことになるのかしら?
boost::shared_ptr<void*> hoge(new Sub()); こういうのもうまくうごくように出来てるよねたしか。
ごめんこっちね boost::shared_ptr<void> hoge(new Sub()); バリアントポインタ配列みたいな感じで、 デストラクタも入れた物のがちゃんと呼ばれる。
>>802 >>798 で引用された文がそのことですな
しかしvoidでやっちゃうと中身使うのが大変だな。
開放管理専用にするしかないかな。
なんだかやり過ぎのような。 「仮想関数かどうか」を判別するうまい手段があれば、 コンパイルエラーにするんだろうけど。
>>783-785 同じ UNICODE でも UTF-8 なら std::string。
std::wstring なら一般的には「1要素==1文字」が
成立するんだけど例外があるから気をつけれ。
あと、環境によって 2 == sizeof(wchar_t) だったり
4 == sizeof(wchar_t) だったりするのにも気をつけれ。
>>804 > 「仮想関数かどうか」を判別するうまい手段があれば、
> コンパイルエラーにするんだろうけど。
いや、普通のポインタで
Super* hoge = new Sub;
void* hoge = new Sub;
が使える以上
shared_ptr<Super> hoge( new Sub );
shared_ptr<void> hoge( new Sub );
という使い方ができないといかん、というコンセプトで開発されてるので
そうでもないと思う。で、当然「スマート」ポインタなんだから、一番適切な
デストラクトを呼んでくれるようになってて嬉しいなと。
個人的には、
>>797 氏が書いてるようなカスタム解体関数を
使ってつくったような shared_ptr でも
shared_ptr<Abc> ptr = custom_deleter_ptr;
みたいに同じ shared_ptr<Abc> で受けられるのが便利。
1-30-0のboost::signalはBCC5.5.1で使えないのか? tutorialではsignalNのtemplateで使えるみたいなこと書いてるが。 boost/mpl/aux_/integral_wrapper.hpp 44: オプションコンテキスト応答深度の上限を超過: 再帰をチェックしてください。 が山ほどでる。
808 :
デフォルトの名無しさん :03/07/03 17:43
VC++7.1 が Boost Regression Tests で 100% 達成1番のり Age!!
809 :
デフォルトの名無しさん :03/07/03 23:49
smartポインタをコンテナにいれたときに、*iteratorしたら、smartポインタの実体が返ってくる奴が標準でついてほしい。 なんかそれっぽい記事はあったんだが、需要とかないのかね。 iteratorアダプターとかつかって自分でつくればいいのだが、まんどくせー。 つーか、iteratorアダプターってなんか激しく便利そうな予感。
811 :
デフォルトの名無しさん :03/07/03 23:54
もういやだ! デストラクタ辺りが複雑でついていけません。 「スマート」ポインタなのに、ユーザーが挙動を把握してないと使えないなんて ナンセンスだと思います。
>>809 > iteratorアダプターとかつかって自分でつくればいいのだが、まんどくせー。
作らんでもそのまんま indirect_iterator 使えばよいのではなかろうか。
>>809 とちゅうでヌルポ入ってると、アルゴリズム系で爆死するがな。
しない方法ある?
あと、vc6だとmake_indirect_iteratorつかえないんで、まんどくさー。
>>813-814 > *iteratorしたら、smartポインタの実体が返ってくる
この要求の時点でヌルポインタが入ってたら死亡確定な
気がするんだけど、どーゆー動作を期待してるん?
816 :
デフォルトの名無しさん :03/07/04 01:20
>>815 そこをなんとかしてくれる動作!!
なかったら、mapみたいに作ってくれるとか・・・。
まぁ勝手に作られてもこまるんだけどさ。
なんつーか、game programin gems の1巻にでてた、ハンドルマネージャークラスみたいに
Keyを入れたらすぐ値を返すために、vectorに値つーか、ポインタを保存しといて、
消去するときは、ポインタをNULLにするだけって感じなクラスをつくりたいときに、
めんどくさくなく、簡単にできんもんかなと思ったわけで。
// うごいた・・・ #include <iostream> #include <vector> #include <algorithm> #include "boost/shared_ptr.hpp" #include "boost/lambda/lambda.hpp" #include "boost/lambda/if.hpp" int main() { typedef boost::shared_ptr< int > int_ptr; std::vector< int_ptr > v( 5 ); v[1].reset( new int( 3 ) ); v[4].reset( new int( 432 ) ); using namespace boost::lambda; std::for_each( v.begin() , v.end() , if_then( _1 , std::cout << ret< int >( *_1 ) << ' ' ) ); return 0; }
>>818 うんこVC6じゃコンパイルできない・・・。
はやく、7.1にしたい。
おまえの稼ぎじゃ7.1なんて永遠に無理
821 :
デフォルトの名無しさん :03/07/04 21:09
VC7.1 と boost-1.30でコンパイルが通らないところがあります boost_1_30_0\libs\date_time\testにあるJamfileを使ってビルドしようとすると C:\boost_1_30_0\boost\lexical_cast.hpp(147) : error C2679: 二項演算子 '<<' : 型 'const boost::token_iterator_generator<TokenizerFunc,Iterator,Type>::value_type' の右オペランドを扱う演算子が見つかりません (または変換できません)。 with [ TokenizerFunc=boost::char_delimiters_separator<char>, Iterator=std::basic_string<char,std::char_traits<char>,std::allocato r<char>>::const_iterator, Type=std::string ] みたいなエラーが数箇所 どうすればいいんでしょう?
>>821 >r<char>>::const_iterator,
そこんとこは↓こんな風にスペース入れとけ。
r<char> >::const_iterator,
ださいね(w
824 :
デフォルトの名無しさん :03/07/05 11:11
>>822 821はエラーメッセージ中には'>>'が出てくるけどコンパイラがテンプレート
を展開したときにそうなってるだけで実際のソースはそうはなってないん
じゃないの?
違ったらごめん
知ったかが紛れ込んだ模様
偶然boost::spiritを知って、ドキュメントを読んでみたが これ凄いな
yacc/lexには戻れない といいたいけど、コンパイルにCPU食うんだよね、これ。 実験的に実践投入してます
828 :
デフォルトの名無しさん :03/07/07 23:55
sprit 使った本格的な例何か無いかなぁ? lisp のインタープリタとかそーゆーの。 そゆのがあれば大部使い方分かると思うんだけど。
>>828 Cプリプロセッサができあがってたはず。
あぼーん
CSVのサンプルがあった
ヤタ!漏れも今日からVC7.1だ! lambdaが通ったときに感動したのは漏れだけですか。そうですか。
7.1で不具合出たら報告キボンヌ
lambda の読み方に関する議論は外出ですか? とりあえず、「ランブダ」で合ってますか?
議論も何もλそのまんまですからねぇ…
ランバダ!!
>835 ワロタ っていうか高校物理で使っただろうに>λ(ラムダ)
小学校入ったばっかの頃に「スターフォース」ってゲームをきっかけに ギリシャ文字は全部覚えたよ。
大学の教養で物理を真面目に勉強したらギリシャ文字をいつの間にか 全部覚えていた。
じゃあ次は梵字だな
小学校入ったばっかの頃に「斑鳩」ってゲームをきっかけに 梵字は全部覚えたよ。
boostってすごいな Cygwinのg++にboost_concept_check.hがあるじゃないですか。 これって有名な話?
ああ、なんかつかえないや。う〜ん。
結論。boostと一緒ジャン。 結局、普通にboostつかって。エラーチェックはstatic_assertのみに抑えて あとはコンパイラに任せた方がよさそうだ。
?
ひとりごとで3レスかよ
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
850 :
デフォルトの名無しさん :03/07/16 13:50
そろそろ あ げ な い か?
boost-jp だいぶ停滞してるね。あのプロジェクトは事実上フェイドアウト?
まぁ、ボランティアだからな メンバーが飽きたらそれまで
日本人は持続力が無いね。
>>851 俺の仕事代わりにやってくれるなら続きの訳してもいいよ。
boost 1.30で以下のコードをコンパイルして実行すると落ちるのはバグでしょうか。 コンパイラはWindowsのMinGW gcc 3.2.3です。 ソース> #include <boost/regex.hpp> int main() { boost::RegEx r("\\"); return 0; } 実行結果> This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
BoostのRegexはどうか知らないが、\が言語処理系のメタキャラで、かつ 正規表現のメタキャラなので、"\\\\"と書かないと正規表現中で「\」 一文字を表現できない、という問題がありがちです。
\ にマッチする正規表現は /\\/ で、それを文字列で表すと "\\\\" ということですね
>856-857 ありがとうございます。 というか、例外捉えるのをすっかり忘れていました(汗)。
ttp://www105.sakura.ne.jp/~crane/program/ >boost::formatを使用するとコンパイルエラーがでる。
>これを解消するにはboost/format/feed_args.hppの73行目を下記のように書き換える
>
>//#if BOOST_WORKAROUND( BOOST_MSVC, BOOST_TESTED_AT(1300)) コメントアウト
>#if BOOST_MSVC <= 1300 && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
>
>これでコンパイルが通るようになる。
boost::formatを使おうとして動かなく、発見した。
既出かも知れないけど。
boost::formatはistreamにも対応しないかねえ
>>859 かなり前からCVSに修正版が置いてあった様な気がした。
以下のソースをコンパイルするとエラーが出るのは何故なんでしょうか。 コメントアウトした部分のようにすれば大丈夫なんですが。 ソース: #include <boost/function.hpp> #include <boost/bind.hpp> #include <iostream> using namespace std; int func1(int n) { return n; } int func2(int n1, int n2) { return n1+n2; } class Test { public: template <class T> Test(T fn) { cout << fn(1) << endl; } };
続き。 int main() { Test t1(boost::function<int (int)>(boost::bind(func1, _1))); Test t2(boost::function<int (int)>(boost::bind(func2, 10, _1))); //boost::function<int (int)> f1(boost::bind(func1, _1)); //boost::function<int (int)> f2(boost::bind(func2, 10, _1)); //Test t1(f1); //Test t2(f2); return 0; } エラーメッセージ: >g++ t107.cpp t107.cpp: In function `int main()': t107.cpp:29: redefinition of `boost::function<int ()(int), std::allocator<void> > boost::bind' t107.cpp:28: `boost::function<int ()(int), std::allocator<void> > boost::bind' previously declared here t107.cpp:29: declaration of `boost::function<int ()(int), std::allocator<void> > boost::bind' t107.cpp:28: conflicts with previous declaration `boost::function<int ()(int), std::allocator<void> > boost::bind'
補足。 コンパイラは g++ (GCC) 3.2.3 (mingw special 20030504-1) です。
865 :
デフォルトの名無しさん :03/07/28 03:51
int bind(int); class function { public: function(int); }; class Test { public: Test(function); }; int main() { Test t1(function(bind(0))); Test t2(function(bind(1))); return 0; } : In function `int main()': :15: redeclaration of `function bind' :14: `function bind' previously declared here :15: declaration of `function bind' :14: conflicts with previous declaration `function bind' とりあえず、問題を局所化してみた。 boostもtemplateも関係ないらしい。 gccのバグかな。
おもしろそうだから勝手にageさせてもらった。 ちなみに、 Test t1((function(bind(0)))); Test t2((function(bind(1)))); こうすれば、宣言と式の曖昧さが解決されて、 意図しているであろう本来の意味が、gccに伝わる。
関数宣言と思われるからでは? バグではなく、規格通りかと。
869 :
デフォルトの名無しさん :03/07/29 10:10
sandbox に何かお薦めってある?
870 :
デフォルトの名無しさん :03/07/29 10:24
871 :
デフォルトの名無しさん :03/07/29 23:54
>>870 これはageておいた方が良いだろう((((;゚Д゚)))ガクガクブルブル
更新チェッカに引っかかったから見ちゃったよ。 サイズだけ変わってたのはそういうことか・・・。 とりあえずウィルスバスター無反応だった。
shared_ptr をvectorにいれてメンバ関数を呼び出したいんですが class hoge { public: void print(){ TRACE("HOGE");} } vector< boost::shared_ptr< hoge > > vec; ... std::for_each( vec.begin(), vec.end(), std::mem_fun( &hoge::print )); std::for_each( vec.begin(), vec.end(), boost::mem_fun( &hoge::print )); コンパイルエラーになるんです。 おれだけですかね? エラーメッセージは void boost::mem_fun_t<S,T>::operator ()(T *) const' : 1 番目の引数を 'std::allocator<_Ty>::value_type' から 'test *' に変換できません VC7, 付属のSTL を使ってるんですが。
>>873 boost::mem_fnかboost::bindで。
> 874 レスありがとうございます。 上をstd::for_each( vec.begin(), vec.end(), boost::bind( &hoge.print, _1 ) ); としたら動きました。
>>875 boost::mem_fn(&hoge::print)
でも同じ事が出来るから試しにやってみれ。覚えておくと便利。
(^^)
VC7.1が100%になってますね ネタかと思ったよ
どーせboostを通すことを再優先したんだろうけど。
lokiもそのまま通るんじゃない?
TypeList使えたよ。
Boost, Loki, Blitzがらくらくって謳ってるしな。
>>879 前々回が99%だったからboost側がコードを修正したんだろ
その1%はどのコンパイラも通ってなかったからソース自体がおかしかったんだろうし
boost通るってことはテンプレート周り完璧ってことなんだが
Blitzって何?
>>883 これでtypeofサポートしてくれたら……_| ̄|○
typeofってどんな仕様のもので、どう使えるものが欲しいの?
887 :
デフォルトの名無しさん :03/08/05 06:18
1.30.1 age
gcc/gcc/cp/* のバグ出ししてください。おながいします。
891 :
デフォルトの名無しさん :03/08/05 22:10
std::string s = "000000FE"; unsigned long l = boost::lexical_cast<unsigned long>(s); ってやったら例外投げつけられました。 16進の文字列はキャストできないんですか? また、どのようにしたらできますか?
strtoul(s.c_str(),0,16);
内部で使われるストリームに書式を伝える方法がないからな >For more involved conversions, such as where precision >or formatting need tighter control than is offered >by the default behavior of lexical_cast, >the conventional stringstream approach is recommended.
struct B {}; struct D: B {}; B* ins = new D; のとき、typeof(ins)はBになるのだが、 静的でなく動的な型を拾ってくれるtypeofはないものか。
boost以前にC,C++をしっかりマスターしないとダメづら
そうでござるな
>>89 namespace fusianasan
{
class bad_hexical_cast : public std::bad_cast
{
public:
virtual const char * what() const throw()
{
return "bad hexical cast: "
"source type value could not be interpreted as target";
}
};
template<typename Target, typename Source>
Target hexical_cast(Source arg)
{
std::stringstream interpreter;
Target result;
if(!(interpreter << std::hex << arg) || !(interpreter >> std::hex >> result) ||
!(interpreter >> std::ws).eof())
throw bad_hexical_cast();
return result;
}
}
>>895 typeidじゃ型として使えないんじゃ?
>>900 動的なものを型宣言として使ってどうすんの?
struct D: B {};
B* pB = ...;
dynamic_typeof(pB) pD = static_cast<dynamic_typeof(pB)>(pB);
// pD->OperationOfD(); // ×: ここに型D特有の操作は書けない。dynamic_typeof(pB) はDではないかもしれないから
pD->OperationOfB(); // Bのサブクラスに共通な操作なら書けるが、
pB->OperationOfB(); // それならpBから呼びだしゃ十分
C++では任意型のデータを動的に作れるわけではないから無意味
14 名前: いやく部門 投稿日: 2003/08/06(水) 17:52
Blake Stowell: SCOは現在、C++の所有権を有している。
SCOは顧客から、C++をライセンスしたいとの相談を受けることがよくあり、
そのような場合、ライセンス料を徴収している。
このような処置は顧客ごとにケースバイケースで行われており、
公に公開されたものではない。
C++のライセンシングはSCOのソースライセンスプログラムの一環である。
15 名前: Kent.N 投稿日: 2003/08/06(水) 17:54
Blake Stowell:C++はSCOが今日所有する資産の一つで、
我々からC++のライセンス供与を受けたいというお客様は
ひっきりなしにいらっしゃるので、実際にそうしています。
具体的な内容はお客様ごとにcase-by-caseで、第三者に
明らかにしない方針とさせていただいています。
C++のライセンス供与は現在SCOのSCOsource licensing programの
一部になっております。
http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=5651&KEY=1049123895&START=13
( ゚д゚)ポカーーーーーーーーーーーーーーン
つい、この間 shared_ptr の ポインタ(しかもvoid*にキャストして)を関数に渡して データぶっ飛んでるよとなげいたことがありますた。 おまいらもなんかない?
906 :
デフォルトの名無しさん :03/08/08 00:37
"1.30.1 is completely broken."
>>907 いやもうバグだらけなので1.30.2を出すらしいよ。
ちょっといいですか? BCC5.5で正規表現を使おうとすると エラーが2,3個と警告が多数でるのですがどうすればいいのでしょうか。 ちなみにサンプルプログラムでも同じ現象が・・・
今までvc6でboostが使えていたのですが.NET 2003で使おうと思い .NET 2003のIDEのインクルードpathの設定をして、boost::formatでも試してみるかと思ったら いきなりdisambiguaterが定義されていない識別子です、と言われてしまいます。 他にもテンプレートがらみのエラーがたくさん出ます。 .NET 2003のIDEからboostを使うときは何か他に設定が必要なんでしょうか? 場違いかとは思いますが、どうかよろしくおねがいします。
bcc5.5で #include <boost/filesystem/path.hpp> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/fstream.hpp> したら エラー E2489 \boost/mpl/aux_/integral_wrapper.hpp 44: オプションコンテキスト応答深度の上限を超過: 再帰をチェックしてください とでるんだけどもしかして漏れの設定ミス?
>>915 エラーもう一個追加
エラー E2324 \boost/limits.hpp 40: 数値定数が大きすぎる
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
通報しますた
cygwinでboost使うにはどうすればいいの?
>>920 boostのうちでビルド不要な部分は #include さえすれば使えるので、
gccの、なんだっけ 環境変数CPLUS_INCLUDE_PATH とかでboostにパス通しとけばok。
ビルドが要る部分は、
bjam -sTOOLS=gcc
でcygwin-gcc用にビルドできる。
boost::threadの使い方を教えて欲しいダス。 bjamでビルドしたライブラリをプロジェクトに追加するだけじゃだめなんでつか? コンパイルすると#error : Thread support is unavailable! なんて言われてしまうです。 on MSVC7.1 WindowsXPPro ここをミロでもイイですので。
なるほど、thanks!
>>922 プロジェクトのプロパティのC/C++のコード生成のランタイムライブラリ
をマルチスレッド用に汁。
>>924 できましたthx!
基本的なことなのに忘れてました。
次スレはなしの方向で。 templateライブラリ総合スレッドへ移動よろしこ。
そのスレ荒れてるしboost専用スレ立てたほうが懸命だな。 というわけで漏れはboost専用の次スレに一票。
>>929 一年前、確か、STL,boost,Loki,とテンプレートライブラリ関連の
スレッドが沢山ありすぎて読み難いという話から、一つにまとめよう
ということで、できたのが上のスレッドです。まさかここまでboost
スレが長持ちするものだとは思わなかったけどw
個人的にはどうでもいいです。boostスレが別個にあってもいいとは思います。
一つにまとめるなら,本当なら"template総合スレ"なんてタイトルじゃなくて
boostやLokiのようなtemplateをフル活用したライブラリ専用スレという意味合いが
伝わる、そんな名前がいいかなあと。言語機能としてのtemplateやSTLは
相談室の方で十分な気もするし。
後の人に任せます。
spiritコムパイル遅すぎsage
おまえら1.30.2でますたよ。
933 :
デフォルトの名無しさん :03/08/19 13:15
ML で Boost GUI/GDI template Library についての話題が合ったらしいけど、 英語の出来ないおれが見ても、まったく流れがつかめん。 把握している人がいたら、解説キボン
>>933 思いっきり斜め読みしかしてないが
・GUIライブラリが欲しいぞ。STLのコンテナと綺麗に組み合わさるヤツ。
list<T> に push_back したらリストボックスの要素が増えたりすんの。
・当然プラットホーム非依存だよね?
・プラットホーム非依存ってーと、wxWindow とかは?
・いや ModernなC++ライブラリとしては、boost::spirit みたいな
サブ言語でC++のコード中にGUIが記述できるとカコイイ!!
・とりあえずsfにプロジェクト作ってみますた。
→
http://sourceforge.net/projects/notus/ ・XMLでUI記述して読み込みってどうよ?
・つーかそれって既にXULがあんじゃん。
とかなんとか。あんまり話まとまってないように読めた。
誰かマジメにスレッド追ってる人、解説キボン。
936 :
デフォルトの名無しさん :03/08/19 22:23
boost初心者ですがおながいします。 rationalとintを掛けたいのですができません。 boost::rational<int> r(1,3); int i= r * 2000; 見たいなのですが。どうすればいいでしょうか?
すんません。rational_castっていうのがあるのですね。 しつれいしますた。
>>935 ありがとう。
MLのLOGを読もうとしたけど、どこが根っこなのかわからなかったから、
こうしてまとめてもらえると助かります。
引き続き情報募集中です。
Yahoo Groups に boost_gui があったので、早速みてみた。
テスト板だからだろうが、MFC 依存っぽいコードがあったのはひいた。
期待していた Listbox Control とかは無くて、少しがっかり。
テストコードは dialog つくって表示するものだったけど、
少ないコード量なのにもかかわらず、割と複雑なものだった。
期待大。
↑は、テストコードと、適当なヘッダを見ただけで書いたもの。 ソース部分は相変わらず複雑で、読むには相当な気合がなきゃダメっぽ。
boostの実装ファイルはippって拡張子ですが、なぜなのでしょうか? cppじゃない理由が知りたいれす
BOOST_STATIC_CONSTANT の第2引数内にカンマを使いたいときは一度 typedef して BOOST_STATIC_CONSTANT(bool, tmp::value) とかして大丈夫ですか?
>>940 boostのほとんどのファイルの実装は*.hppだと思うが。
なぜかといえば、
・ほとんどのライブラリはtemplateとして実装されている。
・一般的にtemplateの実装はヘッダファイルに置かれる。
・C++用のヘッダファイルには*.hではなく*.hppを使う流儀もある。
という、ただそれだけの話だが。
regexやthreadなどのライブラリのコンパイルが必要なものは実装に*.cppを使っている。
>942 それは知ってます。hppじゃなくてippの話なんですが。
>>943 ippって何のコンピュータ用のboostよ?Win32用は全部hppだぜ。
というかboostはコンピュータをディレクティブで判断してるから一種類 しかないんだった。ippなんて見たことないなあ。
*.ippは33ファイルあるよ。拡張子の用途は不明だが。MLに加入して 理由を聞いてみれば?
vcとかだと、テンプレート宣言をヘッダに書いて、実装をcppに書くってことができんから、 ヘッダの最後の方でcppをインクルードするじゃないですか。 そんときに普通の実装と区別しやすいようにわざとippにしてんじゃないの? インラインの頭文字とってippなのでしょうかね?
implのiかもしれん
>>947 > vcとかだと、テンプレート宣言をヘッダに書いて、実装をcppに書くってことができんから、
> ヘッダの最後の方でcppをインクルードするじゃないですか。
> そんときに普通の実装と区別しやすいようにわざとippにしてんじゃないの?
>>948 > implのiかもしれん
が正解。templateライブラリだと時々あるよ。
なんかのライブラリで .i っての見たが、それも同じことなんだろうか。 中身はもちろん普通のソースコードだった。
>>950 それはただのプリプロセスを処理しただけのファイルじゃないの?
952 :
デフォルトの名無しさん :03/08/23 13:17
1.3以降のBoostのtupleがBCCでエラーでる。 しょうがないから1.29にしてるけど解決法あったら教えてちょ
怪傑策:BCCを切り捨てる
もう長いことバージョンアップしてないしねぇ。>BCC
956 :
デフォルトの名無しさん :03/08/23 16:38
Let's boost のtupleとかの例がコンパイルできないのですが 何か考えられる原因はありますでしょうか? 環境はVC++6.0です。
怪傑策:VC++6.0を切り捨てる
いまとなってはもう2世代も前のコンパイラだしね。
boostってお金がたくさんかかるんですね。
>>961 ほぼ十分boost対応してると思われるコンパイラ…
gcc3.x やら intel c++(linux版) やら vc++7.0(のコンパイラ部分) やら
…全部無料で手にはいるので使うといいよ。
vc7.1相当のが入ってる.NET SDKってもう出てたっけ?
>vc++7.0(のコンパイラ部分) やら >…全部無料で手にはいるので使うといいよ。 .Netに付属のモノなら、 過去スレで標準ライブラリとヘッダーファイルがないとありましたが。
>>962 とっくの昔に。
>>963 C#Builder と一緒に .NET SDK 1.1 が入っているんでちょっとチェックしたけど標準Cのライブラリヘッダは一通りあるっぽい。
C++ のは全くない。
Windows 系のヘッダは Platform SDK を入れれば入ると。
STLport を入れれば一通り揃うのか?(良く知らんのだが)
.NET SDKにSTLport突っ込むもうとしたことあるけど、無理だった なんかいろいろヘッダが足りなかったりするみたいで 入れば最強なんだけどなぁ・・・惜しい
bccのヘッダ持ってくればいいじゃん
968 :
デフォルトの名無しさん :03/08/27 14:04
boost のファイル置き場(yahoo groups のやつ)に入れなくなってもうた。 guest じゃだめだったっけ?
Borland C++ 5.6.4でuBALSを使おうとすると エラー E2285 H:\Program Files\Borland\CBuilder6\Include\boost/numeric/ublas/traits.hpp 433: 'std::sqrt(const _STL::complex<float>)' に一致するものが見つからない (関数 type_traits<_STL::complex<float> >::sqrt(const _STL::complex<float> &) ) というエラーが出ます。 complexなんか使わない単純なやつでも出ます。 この現象は自分だけなんですか?解決方法わかりますか?教えてください。
>>969 Borland-C++ 5.6.* は名前空間の解決がおかしい物が多い。_STL::をstd::と
認識できなかったりする。gcc使え。
>>969 お答え、どうもありがとうございます。
Borland-C++ 5.6.*が名前空間の解決がおかしい物が多いなんてショックです。
C++BuilderでVCL使ったプログラミングしたいからgccじゃ全部代用できない。
数値計算の部分はgccでやってDLLにして使えばいいけど面倒くさそうだし、
他のBoostライブラリでも問題おきそうですね。
夏前にVisualStudio.NETにしようか迷ったすえにC++Builder買ったのを少し後悔。
C#やら出さないでC++コンパイラを早く完全にして欲しいよ、Borlandさん。
>>971 BC++5.6(+STLPort)ではなぜかcomplex対応の関数がstd::でなくて
::にばら撒かれているんだよね。そのあたりを自分で何とかすれば通るかも
それからRouge Waveだとその問題はないから
#define _USE_OLD_RW_STL
でもいけるかもしれない
おっとuとgが逆になった。Rogue Waveね
>>969 >>971 972
どうもありがとうございます。
#define _USE_OLD_RW_STL
をやってみると元のエラーは出なかったけど代わりに別の場所で
std::abs(int)' とstd::abs(long)' の区別が曖昧
とかが出てしまいました。
しかし元の問題は最初にエラーが出てた/ublas/traits.hpp自体を変更すれば何とかできました。
969をヒントにエラーになってたtraits.hpp中のstd::sqrtとかの呼び出しを_STL:sqrtに置き換えてみたら通りました。
他にもabsやdouble型のところも変えなきゃいけなかったけど。
親切にどうもありがとうございました。
976 :
デフォルトの名無しさん :03/08/28 02:29
>968 sourceforgeに異動したんじゃない?
OpenJaneの調子がおかしいのかレスの番号の表示が1番づつずれて表示されてたみたいなので 感謝する人の番号が間違ってました。 970、972さん、ありがとうございました。
三桁もあれば下一桁の精度はあやしくて当然
次スレどこ?
向こうのスレは、次スレは 【C++】Templateライブラリ統合スレ(STL以外) Part3【Library】 としてもらおう。 これなら実質、boostスレと同義になるから、boostユーザの人も満足なんでは? それ以外は全て相談室の方へと。
別に今のタイトルでもかまへんよ
ちゅーか、やたら【】付けるのが厨くさい
984 :
デフォルトの名無しさん :03/08/29 11:25
>>984 ライブラリじゃない人は当然相談室の方へ
>>983 確かに厨ですが、検索して掛かるようタイトルつけるのも大事かと
>>981 のタイトルで上手いことヒットするとは思えん。
【Loki】C++ Template統合スレ Part3【Boost】 これでええやん
構文としてのtemplateの質問は相談室の方がよくないですか?
不適と思えば誘導するだろ つーか、名前欄のままだが、 仕切るなUzee
eeeeeeeee
さらしあげ
992 :
デフォルトの名無しさん :03/08/29 12:49
age
993 :
デフォルトの名無しさん :03/08/29 12:53
記念カキコ v(^-^*)
>>983 同意
嘆かわしいが、ム板もだんだん【】厨房に侵されてきたな…
995
boost::scoped_array<996>
お前ら、mplで格好よく1000ゲットしろよな。
ウホッ、いいboost。
ぶー
ゲッツ!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。