Boostを語れゴラァ part2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
語って.はぁと part boost::mpl::int_<2>

前スレ
BOOSTを語れゴラァ
http://pc8.2ch.net/test/read.cgi/tech/1091198276/
2デフォルトの名無しさん:2006/02/07(火) 20:54:30
■関連サイト■
Boost C++ Libraries
http://www.boost.org/

Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/

Let's Boost
http://www.kmonos.net/alang/boost/

boost info
http://shinh.skr.jp/boost/


■関連書籍■
Boost C++ Libraryプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4798007862/

Beyond The C++ Standard Library
http://www.amazon.co.jp/exec/obidos/ASIN/0321133544/

C++ Template Metaprogramming
http://www.amazon.co.jp/exec/obidos/ASIN/0321227255/

The Boost Graph Library
http://www.amazon.co.jp/exec/obidos/ASIN/0201729148/
3デフォルトの名無しさん:2006/02/07(火) 20:54:46
■関連スレ■
C++相談室 part46
http://pc8.2ch.net/test/read.cgi/tech/1136690107/

【C++】STL(Standard Template Library)相談室 4
http://pc8.2ch.net/test/read.cgi/tech/1130680264/
4デフォルトの名無しさん:2006/02/07(火) 21:00:26
で、BOOTSの方との兼ね合いはどうすんのよ。
5デフォルトの名無しさん:2006/02/07(火) 21:03:57
削除依頼出してこようと思いますがそれで良いですか?
6デフォルトの名無しさん:2006/02/07(火) 21:05:05
ん〜Lokiも入れてほしかったよ
7デフォルトの名無しさん:2006/02/07(火) 21:23:17
>>6
Lokiもここでやりましょう。
8デフォルトの名無しさん:2006/02/07(火) 21:37:52
9デフォルトの名無しさん:2006/02/07(火) 21:45:36
>>5
賛成
10デフォルトの名無しさん:2006/02/08(水) 00:30:54
>>1
11デフォルトの名無しさん:2006/02/08(水) 00:36:05
>>5
賛成

「Loki とか入れろ」って声があったんだから、命名についての議論はともかく、
せめて「Boost/Loki を語れゴラァ」ぐらいにしとけよ…。>>1 は阿呆かね。
12デフォルトの名無しさん:2006/02/08(水) 01:01:32
>>11
そんなこと言い出すんだったら、

「汎用性のあるテンプレートライブラリを語れゴルァ」でいいんじゃないかと。
13デフォルトの名無しさん:2006/02/08(水) 01:14:02
C++用ライブラリを語れゴルァ、がいい。
14デフォルトの名無しさん:2006/02/08(水) 01:18:24
じゃあOTLについて語ろうぜ
15デフォルトの名無しさん:2006/02/08(水) 01:19:45
>>13
じゃ、MFCについて語ろうぜ。
16デフォルトの名無しさん:2006/02/08(水) 02:37:27
Boostを語れゴルァ(Lokiもあるよ)
17デフォルトの名無しさん:2006/02/08(水) 03:11:09
boostくらいは名前に入れてくれないと検索にひっかからん
18デフォルトの名無しさん:2006/02/08(水) 04:05:43
MPL本が翻訳されないからLokiで止まってるんだろうな
5年前だぞあれ。いまさら何に使うんだと
19デフォルトの名無しさん:2006/02/08(水) 04:26:45
MPLはボロいコンパイラでも動くように作られてるのでダサい
20デフォルトの名無しさん:2006/02/08(水) 08:50:58
boost::program_options って変態的だけどすてき。
21デフォルトの名無しさん:2006/02/08(水) 11:24:33
>>12
だから、前スレでそういう流れになってたのに >>1 がこんな名前で
スレ立てたんだろう。
22デフォルトの名無しさん:2006/02/08(水) 11:26:48
俺はこのスレタイでいいと思うぞ。
23デフォルトの名無しさん:2006/02/08(水) 13:26:35
Loki はシンプルでテンプレートの学習用にはベストだけど、ちょっと古い。

Boost.MPL.Bind や、Boost.MPL.Iterator、Boost.TypeTraits、Boost.Phoenix2
といった複雑かつ強力なライブラリには劣り、現状でBoost には存在しない
Loki.Singleton や、Loki.SmartPtr も、より強力なものが、Sandbox で開発中だし。

正直、スレタイにLokiはイランだろ
24デフォルトの名無しさん:2006/02/08(水) 14:43:13
xpressiveも、結構バイナリサイズ大きくなるなあ。
インストールがいらない分、regexよりお手軽なのはいいけど。
25デフォルトの名無しさん:2006/02/08(水) 17:11:12
重複すれなので削除依頼出してきました。
http://pc8.2ch.net/test/read.cgi/tech/1139266461/l50
26デフォルトの名無しさん:2006/02/08(水) 17:16:46
thread.erase(std::remove_if(thread.begin(), thread.end(), _1 == >>25), thread.end());
27デフォルトの名無しさん:2006/02/09(木) 05:59:42
boost::multi_arrayはアグリゲートじゃまいのか...

2827:2006/02/09(木) 22:37:39
boost::arrayを再帰的に使えばいいんかな
int a[2][2] = {{0,1},{2,3}};
boost::array<boost::array<int,2>,3> b = {{ {0,1} ,{2,3} }};//2次元以上だと{}が一つ必要ぽ
こんな感じでいけた
2927:2006/02/09(木) 22:38:25
boost::array<boost::array<int,2>,2>
だった...orz
30デフォルトの名無しさん:2006/02/11(土) 18:38:21
なんで __fastcall がやたらと指定されているんだろ。
31デフォルトの名無しさん:2006/02/11(土) 19:19:27
シリアライゼーションの機能があるということで
ワクテカしているんですが、boost/serialization/ 以下のファイルと
boost/archive/ 以下のファイルって何か関係があるんでしょうか?

とりあえず boost/serialization/string.hpp を include
してみたんですが、boost::serialization::access なんていう
関数は見つからないし。
32デフォルトの名無しさん:2006/02/11(土) 19:29:27
>>30
スタック操作が少なくて済むから。
33デフォルトの名無しさん:2006/02/11(土) 19:35:03
>>32 __fastcall なんてできねーよ!
ってワーニング出されてもスピード気にしなければ
無視ってしまっておk?
34デフォルトの名無しさん:2006/02/11(土) 20:01:23
>>32
IA32に限れば滅多に減らない希ガスるけどな。
35デフォルトの名無しさん:2006/02/11(土) 20:16:09
>>34
x86, MMX, XMM各3つまでならレジスタ渡し可能(VC++の場合)
36デフォルトの名無しさん:2006/02/11(土) 20:29:43
>>35
どう指定すればそこまで最適化してくれるの?
37デフォルトの名無しさん:2006/02/11(土) 20:34:06
>>36
関数に__fastcall付けるだけ。
だがコールと共に寿命が切れる値でもないと、結局スタックに退避する事になる。
38デフォルトの名無しさん:2006/02/11(土) 20:40:20
普通に__fastcall付けるだけなら、x86レジスタしか使ってくれないんじゃ。
3958:2006/02/11(土) 20:48:01
>>33
あげんなボケ。
このスレは永遠に下げ進行なんだよ。
二度とあげんな。ハゲッ
40デフォルトの名無しさん:2006/02/11(土) 21:46:56
>>39
オマエモナ
41デフォルトの名無しさん:2006/02/11(土) 22:10:44
ヒント:mmintrin.h
42デフォルトの名無しさん:2006/02/12(日) 05:34:51
Boost に、ハッシュ関数コレクションのようなも乗ってありましたっけ?
CRCからSHA1 までよりどりみどり、みたいな。
43デフォルトの名無しさん:2006/02/12(日) 11:30:20
まだ無いと思う
。これはどの方式かね?

ttp://www.boost.org/doc/html/hash.html
44・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/12(日) 12:07:59
>>42
Crypto++にありそうな気が。

>>43
それはテーブルルックアップ探索用です。リレーショナルデータベースが使ってるやつ。
たとえば文字列なら数文字をパッキングして辞書順になるような数字に変換して検索するだけかと。
45デフォルトの名無しさん:2006/02/13(月) 20:27:14
BOOST_PP_CATで
BOOST_PP_CAT(::, elem)
のようにして::elemと結合させたいのですが、
pasting "::" and "elem" does not give a valid preprocessing token
とエラーが出てしまいます。
ここで、elemはさらに別のマクロに展開されます。
このように、::を含むようなケースで、うまく結合させるにはどうすればいいかご教示ください。
46デフォルトの名無しさん:2006/02/13(月) 23:54:13
>>45
まず、 :: elm じゃ何がダメなのかを説明して欲しい。
47デフォルトの名無しさん:2006/02/14(火) 01:02:29
ためしてねーけど、

#define GLOBALNAMESPACE( x )\
:: x

とか
48デフォルトの名無しさん:2006/02/14(火) 03:59:48
>>46-47
::直後にホワイトスペースが許されるのは知りませんでした。ありがとうございました。

…という以前に、::elemと続けて書いても展開されました。
難しく考えすぎてたようです(鬱
49デフォルトの名無しさん:2006/02/16(木) 07:35:30
vc8でいくつかビルドが失敗するんだが、漏れだけ?
50デフォルトの名無しさん:2006/02/16(木) 08:55:12
なんともなく使えてる
VS 2005 Pro
51デフォルトの名無しさん:2006/02/16(木) 09:03:32
SDK が付属していない Express だといくつか失敗すると思われ
52デフォルトの名無しさん:2006/02/16(木) 09:18:27
>>51 あ、そうかも。

っていうか、 >>49 は環境とエラーメッセージを
もっと詳しく書け。もしくは Boots スレに行け。
53デフォルトの名無しさん:2006/02/16(木) 09:59:03
ブーツ行きかよw
54デフォルトの名無しさん:2006/02/16(木) 10:42:21
boost::serialization って、実行時型情報を要求する?
なんか実行時型情報つかうのって好みじゃなくて。
って、じゃぁ、Boost を使うなよ!って言われそうだが
55デフォルトの名無しさん:2006/02/16(木) 10:49:35
interface_oarchive& から basic_oarchive& へ
dynamic_cast している個所があって、
これだけのために RTTI を要求しているようなんだが、
そもそもこんなキャストをしないような実装にはできなかったんだろうか。
56デフォルトの名無しさん:2006/02/16(木) 10:56:00
>54
てか
>なんか実行時型情報つかうのって好みじゃなくて。
なんで好みじゃないん?
57デフォルトの名無しさん:2006/02/16(木) 10:58:30
>>56 プログラム全体にわたっての型の整合性は
コンパイルが通った時点で保証されている、と信じたいから
58デフォルトの名無しさん:2006/02/16(木) 11:23:12
あと、serialize() を仮想関数にする事で
boost::smart_cast を使わない実装にできそうな気がするから。
気がするだけだけど。

ちなみに、コード眺めてると、
BOOST_SERIALIZATION_BASE_OBJECT_NVP() マクロを
使わなければ、smart_cast も必要なさそうな気がする。
気がするだけだけど。

そんな気がする今日この頃。
59デフォルトの名無しさん:2006/02/16(木) 12:42:06
馬鹿だなお前。馬鹿すぎる。
60デフォルトの名無しさん:2006/02/16(木) 13:17:13
↑どう馬鹿なのか質問したら答えられなくてファビョりそうw
61デフォルトの名無しさん:2006/02/16(木) 14:38:49
テンプレートな仮想関数なんて作れるの?
62デフォルトの名無しさん:2006/02/16(木) 14:42:57
>>61
作れない。
63デフォルトの名無しさん:2006/02/16(木) 14:43:08
>>61
仮想関数はメンバテンプレートになれない。
64デフォルトの名無しさん:2006/02/16(木) 19:29:38
>>54>>55>>57>>58はスルーしてください。> 賢者
65デフォルトの名無しさん:2006/02/16(木) 21:42:52
っていうか、>>57 みたいなこと書くやつは死ねばいいと思う。
お前みたいなド素人がプログラミングでメシ食っていこうなんて百年早い
マジ死ねよ
66デフォルトの名無しさん:2006/02/16(木) 21:45:48
>>65
57の感覚自体はまともだと思うけど
67デフォルトの名無しさん:2006/02/16(木) 21:47:29
つーか初級本卒業でなったつもり君でしょ。
68デフォルトの名無しさん:2006/02/16(木) 21:50:14
>>66
お前も死ねよ。ド素人が
69デフォルトの名無しさん:2006/02/16(木) 21:56:10
>>68
何で?
静的型システムってC++の気に入ってる点のひとつなんだけど
70・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/16(木) 22:21:35
会社のx64マシンに入れようとしたらwaveがスタックオーバーフローでビルド失敗する。
71デフォルトの名無しさん:2006/02/16(木) 22:50:34
クラス作者が提供してないserialization機能が、
静的型システムで済むわけがないだろ。
そういう文脈で>>57なんて狂気の沙汰としか思えない。
72デフォルトの名無しさん:2006/02/16(木) 22:59:09
>>71 いや、Boost の serialization 機能は、
シリアライズしたいクラスに対して
friend class boost::serialization::access;
して、さらに

template <class Archive>
void serialize(Archive, const int);

メソッドを実装する必要があるのです
(そうでない場合はシリアライズしたい
クラスメンバをすべて public にする)。

ですので、クラス作者が実際のシリアライズ操作を
実装することが前提なので、その指摘は間違っています。
7357=72:2006/02/16(木) 23:05:57
あと、これは Boost とは関係ない話なのですが、
なぜ >>57 のように思ったかというと、dynamic_cast で
基底クラスを派生クラスにダウンキャストするということは、
派生クラスによって異なる振る舞いをさせたいから、
ということであり、そういうことは本来仮想関数で
実現するべきだろう、と思ったからです。

素人とか狂気とか言われる理由が分かりません。
74デフォルトの名無しさん:2006/02/16(木) 23:39:57
RTTIの有無についての議論は、今に始まった話じゃないし。
標準化のときも結構もめたんじゃないのかな。

禿の意見は確か、

ある言語にある機能がない場合、PGはそれを自作しようとする。
それなら言語仕様に入れたほうが、まだコストがましになるのではないか。

とかC++の設計と進化で言っていた気がする。
75デフォルトの名無しさん:2006/02/16(木) 23:43:11
>>74
文法がどんどん変態的になっていくのはその理念のせいか(w
76デフォルトの名無しさん:2006/02/16(木) 23:46:29
そのおかげでJavaと違っておもしろいんだよな
7766:2006/02/17(金) 00:19:38
>>71
了解
一応言っとくと66はserialization云々の文脈を無視した上でってことね
78デフォルトの名無しさん:2006/02/17(金) 03:18:10
>>61
作れないが次のような物はどうだ。
struct Empty{};
template <typename T,typename Base=Empty>
class FooImpl:public Empty{
public:
  virtual void foo1(Foo1 & arg){
    (T *)this->bar(arg);
  }
  virtual void foo2(Foo2 & arg){
    (T *)this->bar(arg);
  }
};
class Bar:public FooImpl<Bar>{
  template <typename T>
  void bar(T * arg){
    //...
  }
}

一応テンプレート関数のような動作をする(受け取れる型などに制限ができるが)関数が作れる。
個人的にはテンプレートの動作速度や型が余分な型変換を削ったりできる場合もあると思うし(doubleとfloat用の仮想関数を2つ作ったりしても1つの記述ですむとか)
使い道事態はあるかな・・・と。
79デフォルトの名無しさん:2006/02/18(土) 14:33:14
>>78
え?お前コレ何の役に立つと思ってんの?

class Goo:public FooImpl<Goo>{template <typename T>void bar(T * arg){}}

他にこのようなGooクラスを作るとする。
スーパークラスは、それぞれFooImpl<Bar> と FooImpl<Goo>で、
同じスーパークラスじゃないから、これらを同一的に扱えない。

じゃあ、Barから派生するか?
class Too:public Bar{template <typename T>void bar(T * arg){}}

これで、FooImpl<Bar>*として同一的に扱える。
しかし、Too::barは呼ばれず、Bar::barが呼ばれる。


お前の案は糞の役にも立たない。使い道自体も当然無い。
もうちょっと頭使えよ。
80デフォルトの名無しさん:2006/02/18(土) 19:22:21
>>79
ではこのように訂正
struct Base{
  virtual void foo1(Foo1 & arg)=0;
  virtual void foo2(Foo2 & arg)=0;
};
template <typename T,typename Base_=Base>
class FooImpl:public Base_{
public:
  typedef Base_ Base;
  void foo1(Foo1 & arg){
    (T *)this->bar(ar);g
  }
  void foo2(Foo2 & arg){
    (T *)this->bar(arg);
  }
};
class Bar:public FooImpl<Bar>{
  template <typename T>
  void bar(T * arg){
    //...
  }
}

8178:2006/02/18(土) 19:49:34
次のようなベースクラス・インプリメント用テンプレートクラスがあったとして
struct Base{
  virtual int funcint(int arg)=0;
};
template <typename T,typename Base_=Base>
struct BaseImpl:public Base_{
  int funcint(int arg){
    return (T *)this->func(arg);
  }
};
次のように変更するとする
class Base{
  virtual int funcint(int arg)=0;
  virtual BigInteger funcBigInteger(BigInteger arg)=0;
};
template <typename T,typename Base_=Base>
struct BaseImpl:public Base_{
  int funcint(int arg){
    return (T *)this->func(arg);
  }
  BigInteger funcint(BigInteger arg){
    return (T *)this->func(arg);
  }
};

さて、この両方の仮想関数はほとんど同じような動作をする。
こういうときに両方の型に対してコードが生成されるため、
コードをBigInteger用に増やさなくてもヘッダーファイルに手を加えるだけでBigInteger用の実装が簡単に作れるようになる。
そして、この仕組みを入れたとしても実行時の速度に全く悪影響を与えない(コンパイル時間は別だが)
速度と汎用性のトレードオフでどうするべきか判断付かない時に入れるといざというときに役に立つと考えているし。
汎用性を最初から優先する場合でも速度に配慮する場合に役に立つだろう。
82デフォルトの名無しさん:2006/02/18(土) 23:55:54
( ゚д゚)ポカーン
83デフォルトの名無しさん:2006/02/19(日) 08:36:42
反論できないと顔文字に逃げるってホントなんだな
84デフォルトの名無しさん:2006/02/19(日) 08:40:30
どう見ても荒しだろ。
85デフォルトの名無しさん:2006/02/19(日) 15:04:05
例の基地外?
86デフォルトの名無しさん:2006/02/19(日) 15:34:32
>>83-85
おまえらの脳ミソがへんなんだよ。
どのように見ても、>>81のソースは仮想テンプレート関数にはなってないだろ。
これなら、SFINAE使う方向で考えたほうがましなのを作れるぞ。
87デフォルトの名無しさん:2006/02/20(月) 03:24:54
「どのように見ても」
どのように見たの?
88デフォルトの名無しさん:2006/02/20(月) 10:27:32
  ∧_∧ ̄||ヽ、
 (    ) ||_| ←こんな感じ
 (__ つ三_ |
 /__ヽ) || ||
  _||_J || ||
89デフォルトの名無しさん:2006/02/20(月) 12:06:13
boost::program_options が好きだ。
変態的だけど。

-m {1|2|3} みたいな感じで動作モードを指定する
パラメータを処理したいときって、内部的には
enum にしててもやっぱコマンドラインでは整数で
与えるしかないのかな?なんかもっとスマートな方法内?
90デフォルトの名無しさん:2006/02/22(水) 17:14:27
「コマンドラインでは整数で与えるしかないのかな?」
の意味がようわからんのでなんとも。
自前でパースすればどうだってできるとしか。
91デフォルトの名無しさん:2006/02/23(木) 23:57:05
regex_iterator
コールバック書かなくて済むからいいね。

92デフォルトの名無しさん:2006/02/27(月) 01:58:44
センセー!
boost regexのサンプルgrep.cppのコンパイル方法がわかりません!
Vine Linux 3.2 の g++でコンパイルしています!
93デフォルトの名無しさん:2006/02/27(月) 03:08:44
signalをstd::vectorに突っ込めないのは仕様?

ソース見てみるとsignalはnoncopyable継承してるみたいだから、
vectorで要素確保するときにコンストラクタ起動できなくてエラーが起こるみたいだけど。

ちなみにboost::arrayに突っ込む分には問題なかったっす。

環境:VC2005 + boost 1.33.1
94デフォルトの名無しさん:2006/02/27(月) 03:14:54
標準のコンテナは、signalに限らず不便を生じる。まあ仕方ない。
95デフォルトの名無しさん:2006/02/27(月) 17:40:23
>>93
signalをboost::functionへ突っ込んだらどう?
96デフォルトの名無しさん:2006/02/28(火) 11:24:52
つーか、ptr_vectorが追加されただろう。それ使えや
97デフォルトの名無しさん:2006/02/28(火) 12:17:12
ptr_vector は 1.32 くらいから?
98HelpME:2006/02/28(火) 15:59:15
MacOSXでBoost使ってる人いますか?
Boostってユニバーサルバイナリに出来るんでしょうかね?

BoostのライブラリってBoostJamっていう専用の
ライブラリビルドツールを使ってビルドするので
自分でMakeファイル作ってビルドって出来ませんよね。

PowerPC用、intel用にそれぞれ
BoostJamで吐き出されたBoostライブラリ群を
lipoコマンドでマージするしかないっすかね?

たすけて〜〜〜〜!
99デフォルトの名無しさん:2006/02/28(火) 21:03:00
>98
bjamは内部でgccとかを呼び出してるだけ。
自分で適切なMakefile書けばコンパイルできないこともない。
100デフォルトの名無しさん:2006/02/28(火) 22:35:27
bjamはようするに独自に作ったmakeのようなもの。
101・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/28(火) 22:50:29
IA用とPPC用で別々にビルドして後でバンドルの中身弄っちゃ駄目か?ww
102デフォルトの名無しさん:2006/03/01(水) 08:02:18
Boost の boost::archive::tmpdir って、
単に TMP,TMPDIR,TEMP 環境変数の値を見に行ってるだけなんだな。
103デフォルトの名無しさん:2006/03/01(水) 14:56:34
boost::serialize で double をシリアライズするとき、
精度が一桁少ないと思うのはオレだけ?
104デフォルトの名無しさん:2006/03/01(水) 21:34:01
Boost.Threadを用いたコードがコンパイルできません.下記のようなメッセージが出ます.

/tmp/ccV99vjI.o(.text+0xa7): In function `main':
boost_muti_thread.cpp: undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)'
/tmp/ccV99vjI.o(.text+0x104):boost_muti_thread.cpp: undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)'
/tmp/ccV99vjI.o(.text+0x13e):boost_muti_thread.cpp: undefined reference to `boost::thread::join()'
/tmp/ccV99vjI.o(.text+0x14d):boost_muti_thread.cpp: undefined reference to `boost::thread::join()'
/tmp/ccV99vjI.o(.text+0x163):boost_muti_thread.cpp: undefined reference to `boost::thread::~thread()'
/tmp/ccV99vjI.o(.text+0x17a):boost_muti_thread.cpp: undefined reference to `boost::thread::~thread()'
/tmp/ccV99vjI.o(.text+0x18e):boost_muti_thread.cpp: undefined reference to `boost::thread::~thread()'
/tmp/ccV99vjI.o(.text+0x1ab):boost_muti_thread.cpp: undefined reference to `boost::thread::~thread()'
collect2: ld はステータス 1 で終了しました

日本語のBoostの解説本に載ってたサンプルコードなのですが,コンパイルできませんでした.
Fedora Core 4でg++を使っています.全てのBoostのライブラリをbuildできており,他のBoost
を用いたコードでは問題ありませんでした.

何かアドバイスをお願いいたします.
105・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/01(水) 21:36:17
何かライブラリが足りないっぽい
106デフォルトの名無しさん:2006/03/01(水) 21:40:42
>>104
libboost_threadをリンクしなはれ
107デフォルトの名無しさん:2006/03/01(水) 22:13:14
>>105 >>106
ありがとうございます.

# g++ thread1.cpp -pthread /opt/boost/lib/libboost_thread-gcc-mt.so

でコンパイルできました.
108デフォルトの名無しさん:2006/03/01(水) 22:26:37
Intel C++ Compiler 9.0でBoost-1.33.1をビルドしたいのですが,ほとんどの
ライブラリがビルドできませんでした.ビルドする方法があれば伝授頂きたい
のですが.

環境はFedora Core 4(i386) + l_cc_c_9.0.030です.

以下のようにビルドを試みました.

# export INTEL_PATH=/opt/intel/cc/9.0
# ./configure --with-toolset=intel-linux
# make

よろしくお願いいたします.
109デフォルトの名無しさん:2006/03/01(水) 22:41:48
連投すみません.

Boostの日本語コミュニティが無いので以前から疑問だったことを
教えてください.

multi_arrayのオブジェクトをクラスのメンバにしたかったのですが,
extents is not a typeというエラーが出てコンパイルできません
でした.

class HOGE [
private:
boost::mutli_array<double,1>::extent_range range;
boost::multi_array<double,1> x( boost::extents[range(1,10)] );
...................
};

こんな感じにしたいのですが,なぜかextentsでエラーが出ます.

これはboostの仕様なのでしょうか?
110デフォルトの名無しさん:2006/03/01(水) 23:35:25
boostっつーか、C++の仕様ですけど。
111デフォルトの名無しさん:2006/03/02(木) 00:00:21
コンストラクタで初期化する。
class Hoge {
private:
    boost::mutli_array<double,1>::extent_range range;
    boost::multi_array<double,1> x;
public:
    Hoge() : x(boost::extents[range(1, 10)]) {}
};
112デフォルトの名無しさん:2006/03/02(木) 00:57:53
>>110 >>111
ご返答ありがとうございます.

C++は使い始めてから日が浅くあんまりよく
わかっていない状態で使ってました.
113デフォルトの名無しさん:2006/03/03(金) 06:26:29
アンマネージドなオブジェクトに対してだけしか使えなくてもいいから、
C++/CLI でも使えるようにして欲しいよ。
boost::serialization と boost::program_options だけでもいいからさ
114デフォルトの名無しさん:2006/03/03(金) 07:45:32
>>113
どんなエラーになるの?
115デフォルトの名無しさん:2006/03/03(金) 08:56:25
C++/CLI では関数呼び出しが __clrcall なんだけど、
boost では結構 __fastcall が使われている。

ヘッダだけで済む奴は問題ないんだけど、
*.cpp で提供されているやつは
ライブラリ構築時に作ったオブジェクトで
__fastcall が使われているから
リンクしようとしたときに「だめだよ。」って優しくおこられる。

boost のビルドの時に __clrcall にしてライブラリ構築すれば
いいんだろうけど、boost/config/auto_link.hpp まわりとか
ライブラリ名とかどうすればいいのかな、と。
さらに boost のマニュアルに従って bjam 使ってインストール
してるんだけど、bjam の中身をよく分かってないんで
どうしたもんかと。
116デフォルトの名無しさん:2006/03/03(金) 09:02:49
>>111
extent_rangeは静的メンバで十分だろ。
117115:2006/03/03(金) 10:45:59
とりあえず使いそうなライブラリだけ __fastcall やめにして
リビルドしてみます。って、それだけで簡単にいくんだろうか。
そもそも C++/CLI 使ってるお前が悪いとか言われそうなんだけど。
118デフォルトの名無しさん:2006/03/03(金) 10:48:34
>>117
C++/CLIだったらC#でいいじゃないかと本気で思うが。
119デフォルトの名無しさん:2006/03/03(金) 11:29:38
そんなヤツがこのスレにいるかよ。
C++中毒患者のスレだ、ここは。
120デフォルトの名無しさん:2006/03/03(金) 20:56:56
pin_ptr<T> 命!
121デフォルトの名無しさん:2006/03/03(金) 20:57:56
もう原始帰納関数をコンパイル時に計算できるC++のtemplateじゃないと生きていけない。
しかし良くあんな事思いついたよな。
122デフォルトの名無しさん:2006/03/03(金) 21:00:46
テンプレート考えた奴らもえらいとおもうが、
プリプロセッサつーもんが C に無かったら
もしかしたら思い付かなかったかも知れんな。
123デフォルトの名無しさん:2006/03/03(金) 21:09:47
マクロで汎関数や汎クラスを書いていた頃が懐かしいな。
特殊化ってのはこのマクロ展開そのものだもんな。
124デフォルトの名無しさん:2006/03/03(金) 21:14:17
()をつけわすれて、えらいめにあったよ
演算子の優先順位の関係で
思いもよらぬお隣さんと演算されちゃったり
125デフォルトの名無しさん:2006/03/03(金) 22:56:56
ど素人やん…
126デフォルトの名無しさん:2006/03/03(金) 23:27:13
算数の段階のミスじゃん
127デフォルトの名無しさん:2006/03/03(金) 23:45:13
Boostってなんでバイナリで配布してないの?
128デフォルトの名無しさん:2006/03/03(金) 23:48:57
大部分のライブラリがヘッダのインクルードだけで済むから。
129124:2006/03/03(金) 23:56:04
いや、マクロ展開の結果思いもよらぬ結果に、
ってことだったんだが・・・・
130127:2006/03/03(金) 23:56:26
>>128
そういうことか。ありがと。

正規表現のとこだけでも公式でバイナリ配布してくれないかな・・・
131デフォルトの名無しさん:2006/03/03(金) 23:56:59
*.libや*.dllにいろんなバージョンがあってサイズが大きくなるからでは?
うちではlib以下全部で1.37GBだった。
132デフォルトの名無しさん:2006/03/03(金) 23:58:06
>>127
山ほどあるコンパイラそれぞれにバイナリを作っていたらきりが無い。

そもそもお前はビルドしてできたlibファイルの大きさがどれくらいか知っているか?
俺のVC7.1でビルドしたもので1GiBytes以上ある。
133131:2006/03/03(金) 23:59:00
よく見たらvc版とmgw版とgcc版、さらに1.31と1.32が全部入ってたorz
134デフォルトの名無しさん:2006/03/04(土) 00:09:30
VC++7.1用だけで560MBとかあるな。
135127:2006/03/04(土) 00:16:37
そんなでかいのか・・・。どうりでバイナリ配布がないわけだ。
うちのヘボマシンで、どれだけ時間かかんのかな・・・orz
136デフォルトの名無しさん:2006/03/04(土) 00:23:53
そういえば、聞きたかったことがあるんだけど。

ビルドするだけで、インストールしなかった場合、
ディレクトリ構造が、よくわからなくなるんだけど……。

具体的に言うと

bin\boost\libs\regex\build\libboost_regex.lib\vc-7_1\release
の下に、

runtime-link-static
threading-multi
という、二つのディレクトリがあって、

なぜか、runtime-link-static\threading-multi
なんてものもあるんだけど、マルチスレッドには、どちらを使えばいいんだろう。、

libboost_regex-vc71-mt-s-1_33_1.lib
libboost_regex-vc71-mt-1_33_1.lib

微妙に名前が違う。
どちらも、スタティックリンクライブラリなんだけど。
137デフォルトの名無しさん:2006/03/04(土) 00:24:32
俺の環境では↓こんだけだな、バイナリ・パッケージは。

libboost-date-time libboost-doc libboost-examples libboost-filesystem
libboost-graph libboost-iostreams libboost-program-options
libboost-regex libboost-serialization libboost-signals libboost-test
libboost-thread libboost-wave

>>129
それがど素人やねん
全体と引数を()でくくるのが80年代からの常識。
138124:2006/03/04(土) 00:28:02
>>137 だから80年代の話だってば。
139デフォルトの名無しさん:2006/03/04(土) 00:28:05
VS2005(VC8)だが1.04GBある。正直驚いた。
140・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 00:29:41
2003+Boost1.32で1.17GB
141136:2006/03/04(土) 00:30:50
じつは、regexなどは、まだ使ったことがなかったんだけど。
ちょっと見てみたら、

runtime-link-static\threading-multi
の方を使うみたいだ。

じゃあ、いきなりthreading-multiがあるのはなぜだろう。
142デフォルトの名無しさん:2006/03/04(土) 00:32:21
オブジェクトファイルなんかは、実際に使う分には、いらないから、
必要なファイルだけとしても、やはり数百MBいきそうだな。
143デフォルトの名無しさん:2006/03/04(土) 00:33:21
>>138
素人老人は変えれ
144・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 00:34:24
圧縮属性適用したら800MBくらいに縮んだ
145デフォルトの名無しさん:2006/03/04(土) 00:36:39
Windowsだとハードリンクがコピーになって数倍のディスク食ってる悪寒
146131:2006/03/04(土) 00:40:58
vc71用のを重複除いてみたら118MBだった。これでも大きいな。

//ところでみんなinstallせずに使ってるの?
147・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 00:42:39
ないない。必要な時にテンポラリに展開されそうな気もするが、全部使う機会ってそんなに無いしなぁ。
てか、ぶっちゃけRegex++以外のプリコンパイルライブラリ使わない希ガス。

xpressive使い出したらRegex++すら不要に・・・。
148デフォルトの名無しさん:2006/03/04(土) 00:53:22
Boost::Python使いの漏れは少数派ですか・・・
149デフォルトの名無しさん:2006/03/04(土) 01:03:31
boost::program_options はプリビルト必要だな。
150デフォルトの名無しさん:2006/03/04(土) 01:25:17
抜けてるレスが多いと思ったらあいつが来てるのか
151デフォルトの名無しさん:2006/03/04(土) 01:28:15
>>150は二重人格?
152デフォルトの名無しさん:2006/03/04(土) 01:34:06
>>150 はホモ?
153デフォルトの名無しさん:2006/03/04(土) 08:38:31
>>145
WindowsでもNTFSにはハードリンクが存在する。
154デフォルトの名無しさん:2006/03/04(土) 08:43:48
>>153 存在するのは分かってるけど、
インストール過程でそれを使ってくれない。
155デフォルトの名無しさん:2006/03/04(土) 09:51:09
>>136
threading は single と multi,runtime-link は static と dynamic が
選択肢としてあります. MSVC ではこの 2*2=4 の組み合わせのうち
runtime-link が dynamic で threading が single な組み合わせがありません.
(一部のライブラリはさらに残りの3つの組み合わせの1部をビルドしません)

で, Boost のビルドでは threading が single, runtime-link が dynamic,
がそれぞれデフォルトで,デフォルトに対応したパスは省略されます.
例えば runtime-link-static というパスは,実際には
runtime-link-static\threading-single というパスの省略,といった具合です.
threading-multi は runtime-link-dynamic\threading-multi の省略です.
結果,その3つのディレクトリ構成になります.

で,どちらを使えばよいかというとそれは目的とするビルドによって
適切に決める,としか書きようが無いです.
例えばビルドで必要な他の全てのソースのコンパイルの
コンフィギュレーションとリンクする Boost のライブラリの
コンフィギュレーションを統一するというのがあって,
これが一番分かりやすく,かつ最もオーソドックスな方法かと思います.

>>154
あれ?少なくとも stage ターゲットだと NTFS のハードリンク使ってくれたように
記憶しているんですが……. install ターゲットは違うのかな?
156デフォルトの名無しさん:2006/03/09(木) 11:13:19
なぜmulti_arrayは+とか-とかの基本的な演算をサポートしていないんだろう?

自分で実装しろってことなのかな?
157デフォルトの名無しさん:2006/03/09(木) 11:49:47
>>156
必要性を見出せなかったから
158デフォルトの名無しさん:2006/03/09(木) 12:03:20
>>156
algorithmを使え。

というか君、boostはまだ早くない? その前に標準STLを使いこなして!
159デフォルトの名無しさん:2006/03/09(木) 13:12:47
>>156が欲しいのはmulti_arrayじゃなくて
boost::numeric::ublas::matrixだったりしない?
160デフォルトの名無しさん:2006/03/09(木) 13:51:06
>>156です.
Boostのmulti_arrayにほしい機能があったのでSTLもあんまし
わからないままとりあえず使ってます.
161デフォルトの名無しさん:2006/03/09(木) 15:37:43
>>158
使いこなすも何も役に立たないものばかり。たいてい中途半端なつくり。
162デフォルトの名無しさん:2006/03/09(木) 15:45:43
STLを役に立たないとは剛毅だな。
163デフォルトの名無しさん:2006/03/09(木) 15:49:18
>>156
std::vectorだって+も-もできないし、組み込みの配列型もそうだし。
boost::multi_arrayはただの配列。それ以上でもそれ以下でもない。
164デフォルトの名無しさん:2006/03/09(木) 15:59:37
むしろ勝手にそんな演算子が定義されてたら困る。
数学の行列が使いたいなら>>159だし。
165デフォルトの名無しさん:2006/03/09(木) 17:28:22
1次元ならstd::valarrayなんてのもあるな。
166デフォルトの名無しさん:2006/03/09(木) 19:30:35
>>163
Lispでも実装してmapしてろ
167デフォルトの名無しさん:2006/03/09(木) 21:41:03
>>166
C++ではstd::transformが近いと思うよ。
168デフォルトの名無しさん:2006/03/09(木) 21:58:02
>>167
嫌みにマジレスされてトテモカナスイ
169デフォルトの名無しさん:2006/03/10(金) 15:52:35
>>168
嫌み?
170デフォルトの名無しさん:2006/03/11(土) 02:30:54
>>156です.

>>159
確かにそっちの方が今の用途に合ってました.ありがとうございます.
171デフォルトの名無しさん:2006/03/13(月) 02:47:51
ublas::vector_rangeってどんな場面で役に立つのかがイマイチよくわかりません.

どなたか簡単な解説を…
172デフォルトの名無しさん:2006/03/13(月) 08:51:02
数値計算で行列処理する時は、
部分行列を指定したり、部分行列を行列として扱いたいことあるでしょ。

これはvectorの一部分を指定したり、
それをあたかも別のvectorの様に扱う(vector_proxy)ためのクラス。
173デフォルトの名無しさん:2006/03/13(月) 21:36:10
二次元、三次元のデカルト座標や極座標、ベクトルを取り扱う
ためのクラスライブラリって、Boost にありますか?

いままで自分用に作ったモノを使ってきたんだけど、
準標準のものがあるならそれを使うのもいいかなと思って。
174デフォルトの名無しさん:2006/03/13(月) 22:33:57
>>173
ublas の vector じゃ駄目なのか?
175デフォルトの名無しさん:2006/03/13(月) 22:59:17
>>174
ublasの"u"は何の略なんですか?
176デフォルトの名無しさん:2006/03/13(月) 23:00:54
micro
177デフォルトの名無しさん:2006/03/13(月) 23:02:42
>>176
おお、そっちの意味だったのか、だからuBLASって書いてあるのね。
178171:2006/03/14(火) 02:52:11
>>172
なるほど,ありがとうございます.
179デフォルトの名無しさん:2006/03/15(水) 17:46:49
ublas に要素としてつっこめるクラスって何をみたしてなきゃならないの?
180デフォルトの名無しさん:2006/03/15(水) 17:51:05
位置ベクトルとか速度ベクトルとか時刻とかその極座標系表現とか
そのあたりを取り扱うのに便利なライブラリってないですか?
しこしこ自分で定義した最低限の機能しかないクラスライブラリを
使ってるんですが、絶対みんな同じ事してるよぉ、と思ってます。
181デフォルトの名無しさん:2006/03/15(水) 23:44:22
>>180
ublas の vector じゃ駄目なのか?
182デフォルトの名無しさん:2006/03/16(木) 01:30:41
nanを検出する便利な機能とかがあれば教えてください.
183デフォルトの名無しさん:2006/03/16(木) 03:34:47
>>182
boost じゃないけど、std::isnan() かな。
std::numeric_limits<double>::quiet_NaN() と == すればいいかとも思ったが、駄目っぽい…。
184デフォルトの名無しさん:2006/03/16(木) 10:56:13
ttp://ja.wikipedia.org/wiki/NaN

> NaNは、NaNを含むどんな浮動小数点数と比較しても等
> しくない。NaNの内部表現が一種類だとしてもである。
> そこで、変数の値がNaNかどうかは、それ自身と比較
> してみればすぐにわかる。
185デフォルトの名無しさん:2006/03/16(木) 11:03:01
演算の途中でNaNが発生したら例外を投げるようなものが欲しいのかと思ったが。
186デフォルトの名無しさん:2006/03/16(木) 11:23:25
>>184 だから std::isnan() が無いのか。

>>183 std::isnan() って VC++2005 には無い。

>>181
要素の次元まで考慮したいです。
間違って代入したりできないように。
速度ベクトルと位置ベクトルは
あくまで違うものとして扱いたいです。
次元までは扱えませんが、double 等を
BOOST_STRONG_TYPEDEF するという手も有りますね。
187デフォルトの名無しさん:2006/03/16(木) 11:54:42
isnan はC99だからな
188デフォルトの名無しさん:2006/03/16(木) 11:56:10
しかもマクロだ
189デフォルトの名無しさん:2006/03/16(木) 12:04:44
isnan() の中身って、>>184 みたに自分自身と比較してるのか
それともそれぞれのアーキテクチャの内部表現で見てるのかどっち?
規格上は特に規定されてない??
190デフォルトの名無しさん:2006/03/16(木) 15:09:07
>>186
後出しで糞コンパイラのことなんか出すなよ…。

_isnan()
191デフォルトの名無しさん:2006/03/16(木) 17:47:28
暇つぶしに、lambdaで遊んでいたのですが、こんなコードで悩んでいます。

std::vector<int> v(100) ;

std::for_each(v.begin(), v.end()
  , boost::lambda::_1 = rand()
 ) ;

すべての要素に乱数を代入したいのですが、
なぜか、すべてランダムな、ある値になってしまいます。

rand()が一回しか呼ばれていないようなのですが。
毎回rand()を呼ぶようにする方法はあるのでしょうか?
192ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/16(木) 18:20:46
>>191
boost::lambda::bind を使う。

std::for_each(v.begin(), v.end(),
boost::lambda::_1 = boost::lambda::bind(rand)
);

あと、boost::generator_iterator を使えば、ファンクタを定義すれば
boost::lambda を使わなくてもいいと思う。
193デフォルトの名無しさん:2006/03/16(木) 18:57:51
>>185

>演算の途中でNaNが発生したら例外を投げるようなものが欲しいのかと思ったが。

そう,そんなのがほしいです.なんかいい方法ありませんかね?
194デフォルトの名無しさん:2006/03/17(金) 01:22:29
Signaling NaNのトラップハンドラを使う方法はダメ?
_fpieee_flt()を使えば設定できるらしいけど。
195デフォルトの名無しさん:2006/03/17(金) 01:56:26
>>194
http://docs.sun.com/source/806-4847/ncg_lib.html の辺りだよね。
C99のfloat廻りを使って自分で書くしかないと思う。
196デフォルトの名無しさん:2006/03/18(土) 14:46:50
64bitPentium4にRedHat9、Intelコンパイラ8.0を使っています。
boost-jamはどれをダウンロードしてインストールすればよいのでしょうか?
それと、bjamのsTOOLSは何を指定すればよいのか教えてください。
よろしくお願いします。
197デフォルトの名無しさん:2006/03/18(土) 17:02:29
サイトに普通に載ってるよ
よくみるんだな
198デフォルトの名無しさん:2006/03/18(土) 18:52:52
>>196
Intel Compiler 8.0を使う場合.

sTOOLS=intel-linux

でOK.あと,bjamを使わなくてもコンパイルできるよ.

./configure --with-toolset=intel-linux

でOKだったはず.ver.8.0じゃない場合はこの手順じゃだめだ.
199デフォルトの名無しさん:2006/03/22(水) 17:38:55
uBLASのouter_prodって
外積じゃなくてテンソル積なんだな。
ちょっとツボった。ググってみると取り違えてるとこが幾つもあったし。

普通の外積は定義されてないかな?
//線形代数の範囲を超えそうだけど
200デフォルトの名無しさん:2006/03/26(日) 02:48:05
htp://www.rrsd.com/boost/libs/serialization/doc/tutorial.html#simplecase

ここのサンプルをそのままコンパイル、実行したら
oa << g;
で、
mallocから例外がでてしまいます。
こんなことに陥った方いますか?

もうわけわからんヽ(`Д´)ノ
201デフォルトの名無しさん:2006/03/26(日) 04:06:11
コンパイラや boost のバージョンを言わないのは喧嘩売ってんのか?
202デフォルトの名無しさん:2006/03/26(日) 04:21:58
もち
203デフォルトの名無しさん:2006/03/26(日) 04:26:58
あたぼうよ!
204デフォルトの名無しさん:2006/03/26(日) 04:30:43
なんだその態度は
205デフォルトの名無しさん:2006/03/26(日) 04:31:51
ああん? なんか文句あんのか
206デフォルトの名無しさん:2006/03/26(日) 04:33:40
はいはいワロスワロス
207デフォルトの名無しさん:2006/03/26(日) 04:35:09
お前ちょっと表出ろやこら
208デフォルトの名無しさん:2006/03/26(日) 04:37:36
表だぁ?さみーんだよ。
209デフォルトの名無しさん:2006/03/26(日) 04:40:00
 __     __       n     _____  _____     ___ ___    ___
 |   |    /  /      / /    /       | /__  __/ [][] _| |_| |__ _| |_
 |   |.   /  /    /⌒ヽ/     /   / ̄ ̄|. l    / /     |    _  | |_  レ'~ ̄|
 |   |  /  /    ( ^ω^ )    /   /.  / /    |  |___      ̄|  | / / /   /| |
 |   |  /  /     ノ/ /  ノ   /    ̄ ̄ /     \__|     |  |  ̄ /_  /  | |_
 |   |. /  /   // / ノ     /   / ̄ ̄ ̄                |_|     |__|   \/
 |   |/  /  ⊂( し'./    /   /
 |.     /     | ノ'      /   /
 |    /.     し'      ./   /
  ̄ ̄ ̄              ̄ ̄
210デフォルトの名無しさん:2006/03/26(日) 04:43:48
VIPに書くと、VIP臭くなるからやなんだよ。
211デフォルトの名無しさん:2006/03/26(日) 04:44:47
寒いか?いや、それは俺の心か
212デフォルトの名無しさん:2006/03/26(日) 04:46:27
何、気取ってんだゴルァ
213デフォルトの名無しさん:2006/03/26(日) 04:55:53
いい加減、Bootsに話し戻せよ。
214200:2006/03/26(日) 05:13:37
すいません。
コンパイラはVisualC++.net 2003、
boostのバージョンは1_33_1です。
215デフォルトの名無しさん:2006/03/26(日) 05:44:40
>>213 スレ違い。
216200:2006/03/26(日) 05:57:53
本当に申し訳ありません。
RTTIを有効にしたら直りました。
217デフォルトの名無しさん:2006/03/26(日) 07:00:44
もっと!
218デフォルトの名無しさん:2006/03/26(日) 09:17:40
基底クラス class X;
派生クラス class Y : public X;
virtual メソッドは無し。
デストラクタも非 virtual。

というとき、 shared_ptr<X> px(new Y) ってしたら、
px は最終的にどのデストラクタを呼びます?
ちゃんと ~Y() を呼んでくれるのかなぁ。
仮想デストラクタにしておかないと ~X() を呼ぶだけ?

教えて Boost マスター!
219デフォルトの名無しさん:2006/03/26(日) 09:30:52
自分で試せカス
220デフォルトの名無しさん:2006/03/26(日) 10:58:34
boostがインストールされている場合とされていない場合で、コンパイルするコードを切り替えたいのですが、
#ifdefかなにかでやる方法はないでしょうか?
221デフォルトの名無しさん:2006/03/26(日) 11:04:07
>>220
C++ では無理。
autotools のように、ヘッダの有無をチェックできるツールを使うべし。
222デフォルトの名無しさん:2006/03/28(火) 13:27:34
>>218
boost::shared_ptrならYのデストラクタを呼んでくれる。
それどころかboost::shared_ptr<void>ですら平気。
ttp://d.hatena.ne.jp/Cryolite/20060108
223デフォルトの名無しさん:2006/03/28(火) 15:18:12
>>218
new Y
なら大丈夫だけど
(X*)new Y
だとアウト。
224デフォルトの名無しさん:2006/03/28(火) 16:56:05
>>222
おお
知らんかった
225デフォルトの名無しさん:2006/03/28(火) 20:32:33
shared_ptr は、その便利機能の代償として、
オブジェクトの破壊と構築に若干のコストがかかる。
226デフォルトの名無しさん:2006/03/28(火) 20:48:07
さらに、enable_shared_from_this クラステンプレートから派生させることで
↓のようなことが平気で出来るようになる。

class X : public enable_shared_from_this< X > { int value; };

void func()
{
 // Xを生成してスマートポインタにセット
 shared_ptr<X> p1( new X );
 {
  // 生のポインタを取り出す。
  X * pRaw = p1.get();
  pRaw->value = 0;
  
  // ポインタから、スマートポインタを取り出す
  shared_ptr<X> p2 = pRaw->shared_from_this();
  p2->value = 10;
 }
 assert( p1->value == 10 );
}
227デフォルトの名無しさん:2006/03/29(水) 00:32:00
>>226
>shared_ptr<X> p2 = pRaw->shared_from_this();
これってすごく便利そうだし面白いけど、
実際に使うとなるとどうなんだろう?

途中でdelete p2; とかしちゃったりして
せっかくのスマートポインタの恩恵が半減してしまいそう・・・
228デフォルトの名無しさん:2006/03/29(水) 00:39:55
operator delete()か何かを非公開にしてしまえばdeleteできない。
229デフォルトの名無しさん:2006/03/29(水) 10:11:12
つーか>>226のコードの意図がわかんない。
enable_shared_from_thisってメンバ関数からthisポインタを
shared_ptr(またはweak_ptr)で渡すための苦肉の策でひょ。
230デフォルトの名無しさん:2006/03/29(水) 10:14:16
Cスタイルの関数に、スマートポインタで保護されているオブジェクトを
渡したいときとかに有効だよ。あまりいい例じゃないが↓

struct thread : public enable_shared_from_this< thread >{
 static shared_ptr<thread> create( function1< void, shared_ptr<thread> > pr ){
  return shared_ptr<thread>( new thread( pr ) );
 }
 static shared_ptr<thread> current_thread(){
  void * p = current.get();
  return ( p == 0 ) ? shared_ptr<thread>( new thread )
    : static_cast< thread * >( p )->shared_from_this();
 }
private:
 static tls current; // 現在のスレッドを保存するためのスレッド固有領域
 thread( function1< void, shared_ptr<thread> pr ) : proc( pr ){
  hnd = _beginthreadex( ..., this ); // スレッドパラメータとして自分を渡す
 }
 static unsigned STDCALL threadproc( void * p ){
  thread * self = static_cast< thread * >( p );
  current.set( self ); // 現在のスレッドを保存
  self->proc( self->shared_from_this() );
  return 0;
 }
 ...
};
void myproc( shared_ptr<thread> p ){
 assert( p == thread::current_thread() );
}
int main(){
 shared_ptr<thread> p = thread::create( myproc );
 p->join();
}
231デフォルトの名無しさん:2006/03/29(水) 10:37:35
え?shared_from_this()ってのは、
自身のメンバ関数から、自身のスマートポインタを返す時のために作られた、苦し紛れな方法だろ?

class T{
public:
shared_ptr<T> self(){ return shared_ptr<T>(this); } // 参照カウンタが複数できてバグる、アウト!
};

class T : public enable_shared_from_this<T>{
public:
shared_ptr<T> self(){ return shared_from_this(); } // セーフ
};
232デフォルトの名無しさん:2006/03/29(水) 10:41:45
>>231
230みたいにほかの使い方をしてもいいだろ。
233デフォルトの名無しさん:2006/03/29(水) 11:10:40
あんなブサイクな方法がいいと思ってんなら、個人の自由だし別にいいけど
234デフォルトの名無しさん:2006/03/29(水) 23:48:23
論理を出せないが引っ込みもつかないので仕方なく煽り始めた模様
235デフォルトの名無しさん:2006/03/29(水) 23:54:30
>>234
え?なになに、悔しかったの?

こんくらいで煽られたとかいってんのかぁ。無菌室で育ったのかなぁ…。
もしくはゆとり教育のせいか…。

今日のニュースで高校教科書策定の話が出てたけど、
それは「脱ゆとり」を目指して作られたらしいよ。

もう一度高校生からやりなおしてみるのはどうだろうか?
236デフォルトの名無しさん:2006/03/29(水) 23:58:55
enable_shared_from_this という名前がすべてを語っていると思う。
トリッキーな使い方をするのは自由だけれども。
237デフォルトの名無しさん:2006/03/30(木) 00:19:34
なんかよく分からんけど、thisからshared_ptrが取れたら便利なケースってあるじゃない。
なんか不味いの?
238デフォルトの名無しさん:2006/03/30(木) 00:27:34
例えば?

>>230のような例になってないのは勘弁してくれな
239デフォルトの名無しさん:2006/03/30(木) 08:20:20
いや、だから自身のスマートポインタを他オブジェクトに配りたい場合とか。
そうしたいということ自体が苦し紛れだ!って話?
別に>>230みたいなのでもいいと思うけど、嫌なの?
240デフォルトの名無しさん:2006/03/30(木) 09:04:29
struct hoge {
auto_ptr<thread> th;
hoge(thread * t) {th.reset(t);}
};

try{
auto_ptr<thread> th(new thread(...));
hoge x(th.get());
th.release();
}catch(...){ ... }

ってやらないと、スレッド関連はいろいろマズいんじゃないの?
241デフォルトの名無しさん:2006/03/30(木) 10:07:54
>>235
ウザw
242デフォルトの名無しさん:2006/03/30(木) 10:42:32
まぁ、enable_shread_from_this を使うような場所では
オブジェクトに参照カウントを持たせて、intrusive_ptr を使うべきではある。

で、counted_base から派生させると楽だったんだけど、
counted_base は非推奨になってしまったのでそういうのは自前で
用意しないといけないが。
243237:2006/03/30(木) 21:47:23
>>242
やっぱりintrusive_ptrにするのが筋なのかぁ。
shared_ptrはよく使うけど、intrusive_ptrはほとんど使ったことないんだよね(面倒くさくて)。
thx。調べてみます。
244デフォルトの名無しさん:2006/03/30(木) 21:57:19
>>241
ものすごく悔しかったみたいだから許してあげて。
245デフォルトの名無しさん:2006/03/30(木) 22:00:21
この手のものはちゃんとどういう風に実装されてるか理解して使うべきだよ。
ブラックボックス的に便利だからと使うのはちょっと危険。
246デフォルトの名無しさん:2006/03/30(木) 22:08:34
しかし例えばboost::MPLを読み解けと言われるとちょっと困る

何あのマクロの嵐
247デフォルトの名無しさん:2006/03/30(木) 23:02:33
Boostの功罪を少し語れ
248デフォルトの名無しさん:2006/03/30(木) 23:57:55
>>244
ウザw
249デフォルトの名無しさん:2006/03/31(金) 21:56:58
>>247
C++奥深すぎ、と思い知らされた
250デフォルトの名無しさん:2006/03/31(金) 21:58:59
つ コンパイル時間
251デフォルトの名無しさん:2006/03/31(金) 22:55:00
日本人は低能知能なのには呆れますね。
私達中華人民はあなたたちの掲示板を拝見して笑ってみてますよ。ではありがとうございました。
252デフォルトの名無しさん:2006/03/32(土) 04:28:04
功:まあ面白い、はたから見る分には
罪:しらん。使ったらろくな目にあわないだろう事は目に見えてるから、スルーしてるし
253デフォルトの名無しさん:2006/03/32(土) 10:49:09
今のC++でboost使わない奴は大アホ。センス無し
254デフォルトの名無しさん:2006/03/32(土) 15:28:51
あおりのセンスねえな
255デフォルトの名無しさん:2006/03/32(土) 15:33:51
boostよりいいライブラリ持ってるからboost使う必要無いんだが
256デフォルトの名無しさん:2006/03/32(土) 15:41:26
うp
257デフォルトの名無しさん:2006/03/32(土) 15:43:24
買ってこいとか言われるに3カノッサ
258デフォルトの名無しさん:2006/03/32(土) 15:45:22
259デフォルトの名無しさん:2006/04/02(日) 04:47:53
中途半端な連中はソース公開しない方が良いよ
恥ずかしいしね
260デフォルトの名無しさん:2006/04/02(日) 09:32:37
>>259
どんな下手くそなコードだろうと、本人がこっ恥ずかしいコードだろうと。
自分と違う考え方が表記されてるので常に参考になるものだ。
261デフォルトの名無しさん:2006/04/02(日) 10:24:54
>>260
激しく同意。

まぁプログラミングに限らない話だけど。
262デフォルトの名無しさん:2006/04/02(日) 12:50:49
下手なレスを書いてる奴が下手なコードくらいで恥ずかしがっちゃ駄目だよな。>俺
263デフォルトの名無しさん:2006/04/06(木) 10:05:11
正規表現の置換で2パス以上かかる処理を
1パスにまとめる機能ってないんでしょうか?

a...(略)... b...
A...(略)... B...

264デフォルトの名無しさん:2006/04/06(木) 10:45:57
>>263
> a...(略)... b...
> A...(略)... B...

この例の意味がわからんが、

s/a\(.*\)b/A\1B/ ってことなのか?
265デフォルトの名無しさん:2006/04/06(木) 10:46:45
というか、スレ違いだな。

正規表現 part2
http://pc8.2ch.net/test/read.cgi/tech/1131028296/
266263:2006/04/06(木) 11:31:35
>>264
(a|b)でマッチさせたときに
置換文字列で順序付きでA、Bを指定できるようなイメージのつもりで書きました。

regex_iteratorの正規表現に(a|b)を指定させて
コールバックさせればいいのは分かるのですが、
置換文字列の方でそのような方法は確立されてないのでしょうか?
267デフォルトの名無しさん:2006/04/06(木) 13:59:11
いません
268デフォルトの名無しさん:2006/04/06(木) 15:16:30
boost::regexってことでいいんだよな?

「順序付き」の意味が曖昧なんだけど、 (説明が下手すぎ)
regex_replaceで、
"(a)|(b)"
"(?1A)(?2B)"
とは違うのか?

http://www.boost.org/libs/regex/doc/regex_replace.html
269263:2006/04/06(木) 16:50:10
>>268
できました、ありがとうございます。
(なぜかデフォルトの引数のmatch_defaultだけだととだめでした。)

boost::regex_replace(std::string("abc"),boost::regex("(a)|(b)"),"(?1A)(?2B)",boost::match_default | boost::format_all);//ABc


[a-z] -> [A-Z]
にしたいときはやっぱり
"(a)|(b)|.....(z)"
"(?1A)(?2B).....(?26Z)"
というおそろしい事態になってしまうのでしょうか?
270デフォルトの名無しさん:2006/04/06(木) 17:04:32
>>269
boost::string_algo
271デフォルトの名無しさん:2006/04/06(木) 18:03:24
>>269の冒頭が

「なぜか、ありがとうございます」

に読めて無意味にワロタww
272263:2006/04/07(金) 15:58:35
>>270
正規表現マッチ部分の置換をファンクタ指定できないぽ・・・


template <typename IteratorT,typename OutIteratorT,typename RegexT,typename ReplaceFnT>
void ReplaceRegexCopy( IteratorT ,IteratorT ,OutIteratorT ,const RegexT& ,ReplaceFnT);

template <typename MatchResultT,typename OutItr,typename NumT> void Replace(....);
273デフォルトの名無しさん:2006/04/12(水) 09:07:19
ptr_vectorに constポインタを入れるとき,みんなどうしてる?
vc 7.0 でコンパイルすると,

boost::ptr_vector<const int*> pVect(1);
const int* i =new const int(1);
pVect.push_back(i); // コンパイルエラー
pVect[0] = i; // OK

となるのだが…
274デフォルトの名無しさん:2006/04/12(水) 09:11:14
あー,俺アホだ・・・. orz
275デフォルトの名無しさん:2006/04/12(水) 09:16:24
Boost 新バージョンまだ〜チンチン
ところで、boost::program_options で
インタラクティブなモードがあったら便利だなぁ、とか思いません?
いまはオプションの値をコマンドラインと設定ファイルから供給することが
できるわけですが、インタラクティブにキーボードから受け付けてくれるとべんりだなぁ。

あ、でも画面制御が必要なら curses とか使うハメになるから
Boost の枠内では無理なのかな。別に画面制御が必要な方式じゃなく、
単にライン読み込みでいいんだけどな。
276デフォルトの名無しさん:2006/04/12(水) 09:40:25
http://lists.boost.org/boost-users/2005/11/15042.php
The story behind this question is that I would like to be able to build a simple
GUI parameter dialog based on the options_description, and I want to map
different types to different widgets.
こんな話題も出てましたね。
277デフォルトの名無しさん:2006/04/12(水) 17:24:08
CppUnit と Boost のユニットテストライブラリと
でrftgyふじこpl
278デフォルトの名無しさん:2006/04/20(木) 12:31:23
イタレータの終了条件となる特別なイタレータって、
コンテナだと、こんてな.end()で得て、
イタレータだとイタレター名()でコンストラクトってことになってるけど、
boost::iterator::filter_iteratorはend()を持っています。
どうしてなんでしょうかね?
279デフォルトの名無しさん:2006/04/20(木) 13:20:52
要素を飛ばすタイプのイテレータアダプタは,
自分が止まるべき場所を知っていないとまずい場合があるからです.
実際に作ってみればすぐ分かりますが,
最後の要素のいくつかが filter_iterator の条件に合致した場合,
filter_iterator が終了場所を知っておかないと
increment において overrun してしまいます.
280デフォルトの名無しさん:2006/04/20(木) 13:32:46
いたれたーな
281デフォルトの名無しさん:2006/04/20(木) 14:08:20
全部end()にしとけばよかったのにな。
282デフォルトの名無しさん:2006/04/24(月) 23:53:37
165 :デフォルトの名無しさん :2005/12/05(月) 02:37:52
ここんとこC++でいやいや仕事させられてるんで変なライブラリとかも見る機会が
あるんだが、BOOSTとか見ると何であんな複雑怪奇なことをしてGeneric Programmingに
取り組んでいるのか理解に苦しむ。素直にLisp/Scheme使えばいいのに・・・
アレは理解できない・というよりしたくない。エラーメッセージもわけわからんし、
修正→コンパイル→デバッグのサイクルに費やす時間が異常に長いしで不毛なことこの上なし。


166 :デフォルトの名無しさん :2005/12/05(月) 03:40:22
>>165
確かに boost の lambda は笑った。すべてをコンパイル時にやろうという
C++ の執念は凄いが、実用性は?だよね。
283デフォルトの名無しさん:2006/04/25(火) 00:36:20
>>282
Lisp/Scheme が素直だとは言えない環境も多くある。
ネイティブバイナリが必要なマイナーな環境でも
C++ と boost で Generic Programming の恩恵が受けられる。
十分な実用性だと思うよ。
284デフォルトの名無しさん:2006/04/25(火) 00:41:33
>>283
そこまでして C++ で偽 Generic Programming をやること自体が実用的だろうか、
という問題提起だろ。環境云々は別にして。
Generic Programming 自体が目的(そういう状況が想像できないけど)なら別だが。
285デフォルトの名無しさん:2006/04/25(火) 00:45:55
>>284
Generic Programming をすると実用性が下がるという前提がおかしい。
286デフォルトの名無しさん:2006/04/25(火) 00:56:11
ま、Lisp系から見たら単なる「Generic風」でしかないからねぇ。
あんな中途半端な機能で生産性が向上したりプログラムが読みやすくなったり
するのか、という意味での実用性だよ。速度的なペナルティは少ないからいわゆる
実用プログラムで使っても何ら問題はないと思うけど、使おうという気が起きない。
287デフォルトの名無しさん:2006/04/25(火) 01:23:41
>>286
さっきから C++ での Generic Programming じゃなくて、 boost::lambda に限った話だよな。
まさか std::vector 使う気がおきないからって可変長配列を自分で書き起こすわけも無いだろうし。

boost::lambda の「使おうという気」はこんな感じ。
http://www.boost.org/doc/html/lambda/s03.html#id2707350

これ読んで使う気にならないなら使わなくていい。
むしろライブラリの設計自体と思想が合わないだろうから使わないほうがいい。
288デフォルトの名無しさん:2006/04/25(火) 01:32:40
>>287
もちろんC++のテンプレート一般の話ではなく、Boostのlambdaの話ね。
その例は知ってるけど、正直言って実際に仕事のプログラムで使おうという気は
起きなかった。C++でここまでできるんだという面白さはあるし、ある意味Boost
らしいなとも思うけどね。
289デフォルトの名無しさん:2006/04/25(火) 02:54:46
templateを関数内で宣言できるだけでもいいのになぁ……
ローカルクラスが普通のクラスと同じように扱えるだけでも十分です……
290デフォルトの名無しさん:2006/04/25(火) 06:47:00
>>286
CLOSのdebugもたいがい苦しいが。
daemon methodやcall-next-method駆使してある
他人のプログラムは追っていてもわけがわからなくなるよ。

boost::lambdaで一番困るのは、
何故コンパイルエラーになるかすぐに分からない時。
3行くらいになる型同士を比較したり。文句言う人がいるのも分かる。
291デフォルトの名無しさん:2006/04/25(火) 20:14:57
C最強
292デフォルトの名無しさん:2006/04/25(火) 23:07:32
Lispって遅過ぎてビジネス向きじゃ無いよ
研究室で遊んでる分には楽しいけどね
293デフォルトの名無しさん:2006/04/25(火) 23:09:38
>>292
もっと遅い言語がいっぱいビジネスで使われている現状は無視するのね
294292:2006/04/25(火) 23:10:33
>>293
具体的に
295デフォルトの名無しさん:2006/04/25(火) 23:17:55
Lispの速度の話をするなら、最近のcmuclの性能でも調べてから発言したほうが恥を
かかんと思うぞ。>>293はPerlとかPHPとかRubyとかPythonとかそういう系だろ。
296デフォルトの名無しさん:2006/04/25(火) 23:38:04
MMX/SSE Intrinsicsのようなコンパイラ拡張(とはいえC++のインライン関数展開などに依存している)
まで考慮すれば速度的にC++を超える言語なんかアセンブラ/機械語だけだろ。
297デフォルトの名無しさん:2006/04/25(火) 23:53:46
Cを速度的に超える言語はアセンブラ/機械語だけだが、
C++を速度的に超える言語はいくつかあると思う。
某サイトのベンチマークではHaskellよりも遅いと出てるし、
速度的にはCとC++は分けて考えないと。
298デフォルトの名無しさん:2006/04/26(水) 00:04:02
>>293
Javaが遅いのは許せるがLispが遅いのは許せない
299デフォルトの名無しさん:2006/04/26(水) 00:05:12
>>295
PerlとかPHPとかRubyとかPythonは、言語というよりWeb向けのスクリプトでしょ
Lispと比べてどうする?
300デフォルトの名無しさん:2006/04/26(水) 00:08:27
C++は(本当はCも、だけどC++は特に)使い方次第でしょ。
言語自体の問題とコンテナ等ライブラリの実装の問題も分けて考えないと。
301デフォルトの名無しさん:2006/04/26(水) 00:08:29
Lispをビジネス用途に採用するにはRiskがあるんだよねえ
302デフォルトの名無しさん:2006/04/26(水) 00:09:55
>>300
そうだよね
C++なんて幾らでもパフォーマンスを上げられるよね
生産性は落ちるかもしれないけどね、まあトレード・オフって奴だ
303デフォルトの名無しさん:2006/04/26(水) 00:11:12
>>299
最近のビジネスアプリケーションの多くがそういう「スクリプト言語」で記述されて
いるのは事実だぜ。
304デフォルトの名無しさん:2006/04/26(水) 00:13:53
>>301
速度云々よりもランタイム環境(ライセンスなども含めて)の問題が大きいかもね。
305デフォルトの名無しさん:2006/04/26(水) 01:07:39
そんなあなたたちにD言語でしょ。
306デフォルトの名無しさん:2006/04/26(水) 01:19:26
Dは論外。
開発できるツールとして成立してないじゃん。
307デフォルトの名無しさん:2006/04/26(水) 01:33:58
D使うくらいならC#でいいや。w
308デフォルトの名無しさん:2006/04/26(水) 01:44:05
>>307
この露出狂が!
309デフォルトの名無しさん:2006/04/26(水) 13:26:49
プログラマなんて最終的には一山いくらの世界だから、
その言語を使える人間が簡単に確保できることがもっとも重要なのさ。
310デフォルトの名無しさん:2006/04/26(水) 15:58:14
boost::lexical_castでは+52.0000E-03のような文字列は数値に変換できないのですか?
311デフォルトの名無しさん:2006/04/26(水) 16:29:08
少なくともVC++7.1では
printf("%E\n", lexical_cast<double>("+52.0000E-03"));
で、
> 5.200000E-002
と表示されたが。
312デフォルトの名無しさん:2006/04/28(金) 15:14:12
gccのtypeofって標準にならないのか?
313デフォルトの名無しさん:2006/04/28(金) 22:27:51
たまにはLokiも使ってやれ
314デフォルトの名無しさん:2006/04/30(日) 02:37:12
Lokiはもう忘れ去られたよ
315デフォルトの名無しさん:2006/04/30(日) 14:44:25
Lokiはすでに役目を終えた
316デフォルトの名無しさん:2006/04/30(日) 18:52:52
ロキでも無かった
317デフォルトの名無しさん:2006/05/04(木) 03:39:43
Lokiは優れたライブラリだったけど、バージョンアップしないから
忘れ去られたな。
一人で作ってるライブラリだとこうなることが多い。
318デフォルトの名無しさん:2006/05/04(木) 03:52:52
LokiはSingletonHolderだけ使ってる
似たようなのが他にあればそっちを使っても良いけど
319デフォルトの名無しさん:2006/05/04(木) 10:50:04
おいらもLoki::SingletonとLoki::Factoryを使っている。
SingletonはBoostでも作成中みたいだけど、どうなったんかね?
320デフォルトの名無しさん:2006/05/04(木) 15:54:04
Loki::GenScatterHierarchyは初めて見たときは驚愕した
321デフォルトの名無しさん:2006/05/04(木) 19:18:33
boost、singleton作ってるの?
どんなんなるか早く見てみたいな
322デフォルトの名無しさん:2006/05/04(木) 19:53:12
最近、久しぶりにC++に戻ってきたんでBoostの日本語サイトチェックしたんだけど
もう2年以上更新が止まってるんだね
もう日本語サイトは用済み? みんな本家を見てるの? 
323デフォルトの名無しさん:2006/05/04(木) 20:09:57
>>322
テコ入れに君が翻訳に参加すれば状況は変わるお。
頑張ってくれ、応援してるお。
324デフォルトの名無しさん:2006/05/04(木) 20:21:20
>>322
Boost自体がもう停滞気味
325デフォルトの名無しさん:2006/05/04(木) 22:30:05
>>322
ツール使ってジェネれートされたhtmlソースを見たら
翻訳する気が失せた。
326322:2006/05/04(木) 22:43:38
>>323
Javaだと皆直接英語を見ることが多いなあ
インド人とかと仕事する機会が多いことも英語への拍車をかけてるかも

>>324
Javaだと例えばJBossとジェロニモが覇権争いをしてる、みたいな感じでイノベーションに
休む暇が無いって感じなのにね

JavaからC++に来て思ったのがデザインパターン知ってる人がおそろしく少ない点
知っててもホントに基本的なsingletonとかfactoryとかその程度だし
327デフォルトの名無しさん:2006/05/04(木) 22:49:15
>>326
昔の話だから今はどうか知らないけど、Javaの場合、日本語訳がウンコだったてのもあるからじゃない?
328322:2006/05/04(木) 22:51:39
でも俺はC++の方が可能性を感じるよ
優秀な奴がプログラムすると素晴しいものができる、と信じてる

最も成功してるGoogleとかは、開発にC++使ってんのかなあ?
329デフォルトの名無しさん:2006/05/04(木) 22:54:40
C++にもJavaのeclipseのようなIDEがあればいいんだが、
無いからな。
330デフォルトの名無しさん:2006/05/04(木) 23:07:25
>>328
ttp://goog-sparsehash.sourceforge.net/

使ってないのにこんなもん造ってるならそれはそれで笑えるな
331328:2006/05/04(木) 23:35:13
>>330
俺は使ってると信じてるよ、間違い無く使ってるはずだと
Google的なイノベーションを起こすのはC++だってね
だからC++に可能性を感じてるんだが

でもGoogleの基盤システムのソースコードを読んでないから確信のままなんだけどね
でもこれからのイノベーションはこっちの方向なんだろうね
332デフォルトの名無しさん:2006/05/05(金) 00:12:10
優秀なプログラマは複数の言語を知っていて使い分けている。
プロのプログラマでC++を知らなきゃモグリだが、すべてをC++で済ませてたら無知だ。
333デフォルトの名無しさん:2006/05/05(金) 00:14:28
いや、C++はほとんどすべてのことをC++ですませられる万能言語だよ。
その意味ではC以外で一番の言語だろ。
334デフォルトの名無しさん:2006/05/05(金) 00:21:59
>333
「すませられる」と「適している」は別モンだろうが。
335デフォルトの名無しさん:2006/05/05(金) 00:23:26
>>332
SQLやHTMLを全く知らない職業プログラマとか結構の割合で見るけど、どう思う?
まぁ、「俺は組み込み系一筋です」ってヤツとかならわからんでもないけど、
そうでもないのにSQLやHTMLを知らないようなヤツは、俺は勘弁してくれって思う。
あと、Windowsの基本的な操作すら理解していない職業プログラマとかもいまだにいたりすんだよなぁ。
336デフォルトの名無しさん:2006/05/05(金) 00:34:52
何でおまいここに居るの、みたいなレベルの低い奴多いよね
人月単価の弊害かもね、レベルの低い連中を淘汰できないのは
337デフォルトの名無しさん:2006/05/05(金) 00:38:21
俺なんて最近Boostで一番よく使ってるのがboost::pythonだぜ。w
338デフォルトの名無しさん:2006/05/05(金) 00:43:08
>>337
ワラッタ(笑
339デフォルトの名無しさん:2006/05/05(金) 00:45:09
>>336
まぁ、よくでる話ではあるけど、やっぱりプログラマって免許制にでもして
あまりにもレベルの低すぎるヤツだけでもこの業界から追放して欲すぃ。
他に就く職業がないからって理由だけで人手不足のこの業界を喰い物する連中を誰か排除してくれ〜
340デフォルトの名無しさん:2006/05/05(金) 00:49:40
>>339
うちはそんなの雇わないからへっちゃら。君んとこの人事がアホなだけ。
××試験の結果と役に立つかどうかは別物だから、おそらく免許制は無意味。
341デフォルトの名無しさん:2006/05/05(金) 00:57:23
足きりは出来るでしょ。
学歴と一緒。
342デフォルトの名無しさん:2006/05/05(金) 00:58:22
>>340
所謂、「足切り」するだけでも全然違うって。
でも、人手不足という現状からそーいったことが現実に行われることはないだろうけどね。

>君んとこの人事がアホなだけ。

反論のしようがございません。orz
343デフォルトの名無しさん:2006/05/05(金) 07:32:57
いいかげんスレタイを読んで欲しいな。
344デフォルトの名無しさん:2006/05/05(金) 07:52:48
boostにsingleton libraryってのがあったんだな
Singleton library written by Jason Hise was NOT accepted in Boost.
ってなったみたいだけど。
なんというか、boostにないのが不思議なくらい必要不可欠な
機能なんだから早く問題解決してsandboxにでもいいから
入れてほしいな
345デフォルトの名無しさん:2006/05/05(金) 08:22:31
必要不可欠? ダメだコイツ、典型的なsingleton症候群だ。
346デフォルトの名無しさん:2006/05/05(金) 15:44:36
>>344
> Date: 2005-05-23 16:52 +900
> they uncovered several weknesses in current design and implementation.

だけど、それから新しいの出てないよね。
347デフォルトの名無しさん:2006/05/05(金) 17:17:03
>SQLやHTMLを全く知らない職業プログラマとか結構の割合で見るけど、どう思う?
C++プログラマてきには仕事ではHTMLとか少ないんだろ。
それに、あんなもんてきとーなレベルなら勉強するまでも無く使えるだろ。
できないって言ってるのはやりたくないだけ。

それより、SQLっつーかDB。iBATISのC++版みたいなのない?
灰羽とかのような厨くさいのはいらないから
348デフォルトの名無しさん:2006/05/05(金) 17:42:21
>>347
> てきとーなレベルなら勉強するまでも無く使える
あー、これ便利な言い方ですよね。
「てきとー」の内容次第で色んなものに対してこう言うことができる。
結局何も言っていないのと同じですが、パッと見はそう見えない。便利便利 :-)
349デフォルトの名無しさん:2006/05/05(金) 17:45:11
HTMLってツールが吐き出すものだろ?
350デフォルトの名無しさん:2006/05/05(金) 17:49:43
SQLもツールあったような希ガス

あと、なんとなくageとくよ
351デフォルトの名無しさん:2006/05/05(金) 17:55:27
適当なラベルのレスを書き込むスレはここですか?
352デフォルトの名無しさん:2006/05/05(金) 20:03:35
おまえらJava厨につられすぎwww
353デフォルトの名無しさん:2006/05/05(金) 20:28:08
やっぱC++版のEclipse は必要だなあ
EclipseのC++プラグインはチンケ過ぎる
354デフォルトの名無しさん:2006/05/05(金) 20:33:26
>>353
普通にVCとかKDevelop使えばいいじゃないか
355デフォルトの名無しさん:2006/05/05(金) 21:25:37
>>354
未だにVC++6.0使ってることに苛立ちを感じない?
時代に取り残された感じがすんだよね
マイクロソフトにも見捨てられてるし
356デフォルトの名無しさん:2006/05/05(金) 21:31:50
なぜ 6.0 ?
357デフォルトの名無しさん:2006/05/05(金) 23:08:16
未だにVC++6.0使ってる>>355に苛立ちを感じる
358デフォルトの名無しさん:2006/05/05(金) 23:25:48
>>357
未だにVC++4を使ってる漏れには、何を感じます?
SA・TSU・I ?
359デフォルトの名無しさん:2006/05/05(金) 23:30:12
>>358
便意
360デフォルトの名無しさん:2006/05/05(金) 23:33:53
>>358
残尿感
361デフォルトの名無しさん:2006/05/05(金) 23:52:31
VCとか、Eclipse+Javaに比べると全然ダメじゃん。
相手にすらなってない。ましてやKDevelopは論外。
362デフォルトの名無しさん:2006/05/05(金) 23:58:26
そもそも比較するもんじゃないしw
363デフォルトの名無しさん:2006/05/05(金) 23:59:31
いや、比較するもんだろ。
364デフォルトの名無しさん:2006/05/06(土) 00:02:34
そんなあなたにVC#2005。
365デフォルトの名無しさん:2006/05/06(土) 00:04:02
確かに、VisualStudioはC#に関しては、まずまずいい環境。
だが、C++に関しても、そういうIDEが出て来ないとダメだ。
C++にとって、これは大きなマイナス。
366デフォルトの名無しさん:2006/05/06(土) 00:04:36
#かよ
367デフォルトの名無しさん:2006/05/06(土) 00:10:18
VC#は、リファクタリング機能があるのはいいけど、編集中にリアルタイムで
エラーを表示したりQuick Fixでそのエラー直したりという機能が
ないから、まだまだだな。
368デフォルトの名無しさん:2006/05/06(土) 00:13:02
C/C++は設計思想が古いのでJava並の扱い易さを求めてもだめなんじゃないかと思う。
MSもそこがわかってたのでJavaのコピペのC#を出してきたんだと思うよ。
369デフォルトの名無しさん:2006/05/06(土) 00:14:48
>>368
言語仕様を扱いやすくするわけじゃなくて、IDEを扱いやすくしてくれと
いうことなんだが。
それとも、C++の言語仕様が邪魔してるのかな。
370デフォルトの名無しさん:2006/05/06(土) 00:16:33
C++は複雑なケースを考慮すると文法解析が結構大変だし、半自動リファクタリング
などとは相性が悪い気がする。その点、C#やJavaは楽だよね。
371デフォルトの名無しさん:2006/05/06(土) 00:17:48
C++とJAVA両方触ったことのある人しか分からんと思うけど、どう違うの?
372デフォルトの名無しさん:2006/05/06(土) 00:19:27
またC++、Java、C#の不毛な争いか・・・
要所要所で使い分ければいいじゃん、くだらね
373デフォルトの名無しさん:2006/05/06(土) 00:20:30
>>370
確かにそういう気はするな。
だが、JavaのIDEで出来てることが、C#で出来てないってことは
やはりMSの開発がまだ遅れてるという要素も強いんじゃないかな。
オープンソースコミュニティも駄目だし。
374デフォルトの名無しさん:2006/05/06(土) 00:22:01
>>372
それはそうなんだけど、C++にも〜が欲しいっていう要望だろ。
それは使い分けろじゃ解決にならない。
375デフォルトの名無しさん:2006/05/06(土) 00:24:25
>>372
画像の自動生成にHSP使ってる俺はだめですかそうですか
376デフォルトの名無しさん:2006/05/06(土) 00:24:58
こんなとこでグチってもまさに不毛だw
377デフォルトの名無しさん:2006/05/06(土) 00:25:30
>>376
まあ2chなんてそんなもんだ。
378デフォルトの名無しさん:2006/05/06(土) 00:26:16
EclipseやNetBeans並みのIDEが出来たらC++にも戻りたいが、
戻れなくなりつつある。
という人は結構いるはず。
C#の人ですらそういう人は多いかもしれん。
379デフォルトの名無しさん:2006/05/06(土) 00:31:07
>>371
一言で言えばC#やJavaは文法が単純(容易に解析できる)なので自動的に
書き換えたりする機能と馴染みやすいということ。
その分、C++のほうが自由度は高いんだけどね。C++の文法解析の大変さは
STLやboostを使ったときのコンパイルの遅さで実感できるよね。
380デフォルトの名無しさん:2006/05/06(土) 00:35:14
Javaは10年かかってやっとSTL(Generics)を実装した辺りに、使ってる人の嗜好を感じるよ。
381デフォルトの名無しさん:2006/05/06(土) 00:40:13
JavaのGenericsは正直、C++のテンプレートとは全然違う。
C++の方がはるかに強力。
だから、確かに静的には、C++の方が強力で自由度が高いのは
確か。
ただし、Javaを学習していくと、見た目とは違ってとても動的な
言語であるということがわかってくるよ。
動的な側面を含めれば一概にC++の自由度が高いとは言えなくなる。
382デフォルトの名無しさん:2006/05/06(土) 03:29:26
C/C++ + boost + pythonが最強です。
383デフォルトの名無しさん:2006/05/06(土) 03:39:29
>>382
詳しく
384デフォルトの名無しさん:2006/05/06(土) 05:11:38
>ただし、Javaを学習していくと、見た目とは違ってとても動的な
>言語であるということがわかってくるよ。
そうなの? ぜんぜん気がつかなかったけど、具体的にどう使えばそうなるの?
C#の場合はデリゲータが微妙に可能性あるのかなと思ったんだけど、
C#もGenericsはダメだ、無いよりまし程度。

C++はテンプレートと多重継承のおかげでJava, C#とくらべて
C++ > 越えられない壁 > C# > Java
って、感じかと思ってるけど、あくまで言語能力に限った話だね。

Javaとかと比べるといろんなところにめんどくささがあって、たとえば
便利そうなライブラリがあって使ってみようと思うと、ヘッダーをインクルードして、
staticリンク・DLL、マルチスレッド対応、どれにする? とか、
GCCのlibないぞとかBCでソースからコンパイルしようとすると
コンパイルとーらねーとか、ほんとめんどー。

あと、実行環境。C++にもJVMや.Netフレームワークのようなランタイムみたいなのが
欲しい、boostにそういうの期待したいんだけど
385デフォルトの名無しさん:2006/05/06(土) 05:37:15
言語能力はアセンブラが一番でしょ

JavaもC#もC/C++の課題を克服する目的で作られたような所があるからね

BoostもLinux派とWindows派に切り裂かれてるような所があるしね
386デフォルトの名無しさん:2006/05/06(土) 07:09:18
>>384
>そうなの? ぜんぜん気がつかなかったけど、具体的にどう使えばそうなるの?

まず、こういう言語の話をするときの動的とか静的っていう言葉の
意味がわかってるか?
わかってるのならJavaのリフレクションを調べてみろ。
例えば、リフレクションを使えば実行時にメソッド名の文字列で
メソッドを呼び出せたりする。
それを聞いただけでもC++よりはるかに動的であることがわかるだろう。

もちろん、動的ということはそれだけエラーの発見が遅れるという欠点があるが
自由度・柔軟性という点で見ると動的なのはやはり有利だな。
まあそもそもIDEでコンパイル前にたいていのエラーがわかっちゃうから
総合的に見ればJavaの方がエラーの発見は早いんだがねw
387デフォルトの名無しさん:2006/05/06(土) 07:38:16
極論すると>>372になる気がするな。
その生い立ち上、Networkに関しては
Java>>>>>>>>>>C++
だな。
NetworkやXMLとの相性の良さはC++じゃどうしようもない。
388デフォルトの名無しさん:2006/05/06(土) 12:06:02
時と場合によって、使い分けるのが一番でしょ。
Javaは一般で思われてるほど遅くないけど、やっぱりメモリは馬鹿食いするし、
その点C++は断然有利。
俺も業務ではJavaだけど、家で作るときはDirectX + C++だもんな。
389デフォルトの名無しさん:2006/05/06(土) 12:15:00
>>387
Javaは、邪魔だよお
390デフォルトの名無しさん:2006/05/06(土) 13:07:01
まあ、ゲームはC++だな
391デフォルトの名無しさん:2006/05/06(土) 13:09:44
予想通りの厨な展開になりつつあるな。w
392デフォルトの名無しさん:2006/05/06(土) 13:34:00
ていうか、C++用のプロファイラくれ。
フリーか安い物で。
393デフォルトの名無しさん:2006/05/06(土) 13:41:55
394デフォルトの名無しさん:2006/05/06(土) 19:21:59
>わかってるのならJavaのリフレクションを調べてみろ。
getMethodとかinvoke ? そういえばそんなのもあったね。
個人的には見た目が(ry というのはおいといて、これって
COMのディスパッチまんまなんだよな。JVMや.NETにはORBが内蔵されてて
こんな感じで使えるようにしてるんだろうな。
つーか、簡単にライブラリを使えるようにするためにはORBが不可欠なんだろう、
C++にはそれが無いからめんどーなんだろうな。
boostってORBあったっけ、boost::python ってどうなってるの? つーことで
>>382
詳しく
395デフォルトの名無しさん:2006/05/06(土) 19:27:12
(´-`)
396デフォルトの名無しさん:2006/05/06(土) 19:59:11
>>393
下の方使ってみた。
サンキュ
397デフォルトの名無しさん:2006/05/06(土) 20:06:03
JavaだC#だなんて話はこっちでやれ
C++相談室 part49
http://pc8.2ch.net/test/read.cgi/tech/1146185570/
398デフォルトの名無しさん:2006/05/06(土) 22:22:10
>>397
C++の派生スレで出たゴミを本スレに捨てるな
399デフォルトの名無しさん:2006/05/07(日) 15:15:58
>>394
だから、COMとかそういうんじゃなくて、言語側で出来るところが違うんだよww
400デフォルトの名無しさん:2006/05/07(日) 15:50:27
そう違うね。よかったね。
401デフォルトの名無しさん:2006/05/07(日) 17:34:22
例えば、STLの関数ですら文字列で呼び出せるってんなら同等だけど。
COMって言われてもなw
402デフォルトの名無しさん:2006/05/07(日) 17:37:09
>>401
動的と静的の違いがわからんならすっこんでろ
403デフォルトの名無しさん:2006/05/07(日) 17:41:24
>>386
>例えば、リフレクションを使えば実行時にメソッド名の文字列で
>メソッドを呼び出せたりする。
因みにない場合はどうなるの?
404デフォルトの名無しさん:2006/05/07(日) 17:44:10
実行時例外
405デフォルトの名無しさん:2006/05/07(日) 18:05:13
動的なのがいいってんなら、もっと動的なPythonだかRubyだかやれよJava厨が

C++は静的にやるからいいんだよ。
406デフォルトの名無しさん:2006/05/07(日) 18:43:28
俺は動的野郎じゃ無いけど、Pythonイイね
昔やり掛けたけど、考えてみればBoostでもJavaでもできるだよな
ちょっとPython に嵌ってみようかな
407デフォルトの名無しさん:2006/05/07(日) 19:23:58
C++もJavaや.NETのように、コンパイラやアセンブラ、リンカを
テンプレートライブラリとして提供するべきですよね〜
408デフォルトの名無しさん:2006/05/07(日) 19:31:59
>>405
まったくだ。
-fno-rtti -fno-exceptions なターゲットでもテンプレートばりばり
使えるのが C++ のいいところじゃねーか
409デフォルトの名無しさん:2006/05/07(日) 19:36:07
そろそろevalでも搭載するんじゃないか?w
410デフォルトの名無しさん:2006/05/08(月) 01:13:32
C++リフレクション on Binary2.0 キタコレ
ttp://d.hatena.ne.jp/shinichiro_h/20051116
411デフォルトの名無しさん:2006/05/08(月) 01:26:33
INT8
412デフォルトの名無しさん:2006/05/08(月) 01:27:29
そーいえばCOMのTypeInfoってのがvtblバインディングに対する
リフレクションを提供してたなー。

んでVBからでも(バイナリしか無いCOMオブジェクトの)C++の仮想関数を呼べた。
いまにして思えば結構COMって充実していたな・・・
413デフォルトの名無しさん:2006/05/08(月) 06:31:25
IDEのソース編集中のサポート機能を実装する上で、
#if, #ifdefはウザイ事この上ない。構文解析がかなり難しい。
コンパイルする時と違って、全forkを追わないといけないから。

typedefもぷちウザイ。
とはいえtypedef template欲しいんだけど…
414デフォルトの名無しさん:2006/05/08(月) 10:19:26
>>412
ああいうのが面倒になったから .NET に走ってるんだよ。w
415デフォルトの名無しさん:2006/05/08(月) 10:58:21
ってことはCOMはそのための布石だったのかw
416デフォルトの名無しさん:2006/05/08(月) 15:11:07
COMには困った
417デフォルトの名無しさん:2006/05/08(月) 16:27:12
THE DAJARE
418デフォルトの名無しさん:2006/05/08(月) 20:21:04
>>413
激しく同意
419デフォルトの名無しさん:2006/05/08(月) 20:30:24
フォークとナイフは2つで一つ
420デフォルトの名無しさん:2006/05/09(火) 06:18:31
Serializationで保存した型とは違う型で取り出せてしまうのを禁止にすることはできますか?
namespace io = boost::iostreams;
char buf[100] = {0};

{
  io::stream<io::array> stream(buf);
  boost::archive::binary_oarchive oa(stream);
  oa << std::string("hello");
}

{
  io::stream<io::array> stream(buf);
  boost::archive::binary_iarchive ia(stream);
  long l=0;
  ia >> l;
  std::cout << l << std::endl; // 5と表示されました
}
421420:2006/05/12(金) 02:04:47
basic_iarchive.cppのload_preambleでクラス情報とかバージョンとか読んでるっぽいのですが
クラス情報だけローカル変数に読み込んですぐ捨てられてしまってます.
型があってる,あってないはユーザーが面倒見ろよということなのでしょうか?
もしくはほかの所でチェックする,しないを切り替えるスイッチがあるのでしょうか?

std::stringやlongとかは実装レベルがprimitive_typeで保存されてしまうようなので薄いラッパーで包んで実験してます
struct mystring {
  std::string str;
private:
  friend class boost::serialization::access;
  template<class Archive> void serialize(Archive & ar, const unsigned int) { ar & str; }
};
struct mylong {
  long l;
private:
  friend class boost::serialization::access;
  template<class Archive> void serialize(Archive & ar, const unsigned int) { ar & l; }
};

BOOST_CLASS_IMPLEMENTATION(mystring, boost::serialization::object_class_info);
BOOST_CLASS_IMPLEMENTATION(mylong, boost::serialization::object_class_info);
422デフォルトの名無しさん:2006/05/12(金) 07:22:33
>>421 漏れもシリアライザは使ってるけど、
型があってるかどうかは自分で面倒見ろってことなんじゃね?
しかしよく考えたら、Boost に限らずシリアライザって
ちゃんと読み込めたかどうかの判定って難しいよな。
偶然矛盾無い値として読めてるだけかもしれないし。
本来なら XML スキーマを用意してバリデーションするべきなのかな?
423デフォルトの名無しさん:2006/05/12(金) 07:49:12
XMLに出来るし
424デフォルトの名無しさん:2006/05/12(金) 08:02:56
>>423 いや、そういうことを言ってるんじゃなくて、
xml_oarchive ではバリデーションしないよってこと。
425デフォルトの名無しさん:2006/05/12(金) 10:06:38
>>421
てかload_preambleでクラス情報捨てられてるとか分かってるなら自分で実装できんじゃね?
426420:2006/05/12(金) 19:06:27
かなりきな臭いながらversionを使うことにより実現することができました
struct mystring {
  static const int id = 1;
  private:
  friend class boost::serialization::access;
  template<class Archive> void serialize(Archive & ar, const unsigned int v) {
    if(id!=v)
      throw std::logic_error("aho");
    ...
  }
  ...
};
struct mylong {
  static const int id = 2;
  //あとはmystringとおんなじかんじ
  ...
};
BOOST_CLASS_VERSION(mystring, mystring::id)
BOOST_CLASS_VERSION(mylong, mylong::id)

>> 422
調べてみたのですがC#(.NET Framework クラス ライブラリ)のSerialization...BinaryFormatter.Deserializeメソッドはobject型を返すようになってるみたいです
そして戻り値をas演算子などで予想される型にdynamic_castして型があってるかどうか判定したりして使うように思われます

>> 423
xml_oarchive, xml_iarchiveで保存, 復元するようにすると確かに望んでるように動作することを確認しました.
しかし今回のケースでxmlを使用するのはちょっと贅沢すぎるような気がしました

>> 425
さいわい再実装することなく希望する動作をさせることに成功しました.
しかしながらほかのboostのライブラリとくらべtemplateによる動作の切り替えの幅がせまく,なにかにつけてマクロを使わせてくるように感じました
のでそこらへんをフューチャーする実装を作ってみたいと思います(itukaヽ('ー`)ノ
427デフォルトの名無しさん:2006/05/13(土) 02:36:55
>>422
XMLでスマキでつか?
428デフォルトの名無しさん:2006/05/18(木) 00:43:57
templateなメンバ関数をbindしてfunctionにいれれますか? いったん関数ポインタにしてからいれるのはなんかやです
struct A
{
 template<class U>
 void f(U u)
 {
  std::cout << u << std::endl;
 }
};

template<class T,class U> void test(T& t, U u)
{
 using namespace boost;

 void (T::*fptr)(U) = T::template f<U>;
 (t.*fptr)(777); // OK

 function<void ()> fun = bind(T::template f<U>, t, u); // Error on vc7.1
 fun();
}

int main()
{
 test(A(), 777); return 0;
}
429デフォルトの名無しさん:2006/05/18(木) 00:58:03
>>428
- メンバ関数ポインタの取得に & が必要。
- 非 const 参照の引数として一時オブジェクトは使えない。
これだけ直したら、 gcc 3.4 と VS2005 で通ったよ。

エラーメッセージはなんて出るの?
430428:2006/05/18(木) 01:19:38
いっぱいでちゃってます
main.cpp(23): error C2784: 'boost::_bi::bind_t<boost::_bi::unspecified,F,_bi::list_av_2<A1,A2>::type> boost::bind(F,A1,A2)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
main.cpp(23): error C2784: 'boost::_bi::bind_t<R,boost::_mfi::cmf1<R,T,B1>,_bi::list_av_2<A1,A2>::type> boost::bind(R (__thiscall T::* )(B1) const,A1,A2)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
main.cpp(23): error C2784: 'boost::_bi::bind_t<R,boost::_mfi::mf1<R,T,B1>,_bi::list_av_2<A1,A2>::type> boost::bind(R (__thiscall T::* )(B1),A1,A2)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
main.cpp(23): error C2784: 'boost::_bi::bind_t<R,F,_bi::list_av_1<A1>::type> boost::bind(boost::type<R>,F,A1)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
main.cpp(23): error C2784: 'boost::_bi::bind_t<R,F,_bi::list_av_2<A1,A2>::type> boost::bind(F,A1,A2)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
main.cpp(23): error C2784: 'boost::_bi::bind_t<R,R(__cdecl *)(B1,B2),_bi::list_av_2<A1,A2>::type> boost::bind(R (__cdecl *)(B1,B2),A1,A2)'
            : 'オーバーロードされた関数タイプ 用のテンプレート引数を 'オーバーロードされた関数タイプ' から減少できませんでした。
431デフォルトの名無しさん:2006/05/18(木) 01:22:43
>>430
>>429 の修正入れても変わらない?それなら、もうコンパイラのせいかもしれない。
432428:2006/05/18(木) 01:29:13
かわりませんでした あきらめます
ありがとうございました。
433デフォルトの名無しさん:2006/05/18(木) 01:32:02
>>432
仕事でもなけりゃ、これを機に VS2005 Express に乗り換えればいいんじゃね?
434デフォルトの名無しさん:2006/05/18(木) 15:33:37
>>428
function<void ()> fun = bind(static_cast<void(T::*)(U)>(&T::template f<U>), t, u);
435デフォルトの名無しさん:2006/05/18(木) 17:51:13
>>432
g++ 3.3.5で通る
#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
using namespace std;
struct A
{
template<class U>
void f(U u)
{
std::cout << u << std::endl;
}
};

template<class T,class U> void test(T t, U u)
{
using namespace boost;

void (T::*fptr)(U) = &T::template f<U>;
(t.*fptr)(777); // OK

function<void ()> fun = bind(&T::template f<U>, t, u); // Error on vc7.1
fun();
}

int main()
{
test(A(), 777); return 0;
}
436デフォルトの名無しさん:2006/05/19(金) 01:14:57
>>431
コンパイルが通らないと疲労困憊するだろ
437デフォルトの名無しさん:2006/05/19(金) 03:26:52
つーかVC++は最新でもtemplate廻りは規格適合してないし…
438デフォルトの名無しさん:2006/05/19(金) 12:36:33
threadもう少し強力にならないかな...
439デフォルトの名無しさん:2006/05/20(土) 01:07:17
協力すれっど
440デフォルトの名無しさん:2006/05/20(土) 03:48:38
VC2005でboostを-sTOOLS=VC-8_0-amd64でコンパイルしたんだけどthreadが動かんです。

エラー自体はまさしくコレなんですけどなんか解決策ありますか?
http://lists.boost.org/boost-users/2005/09/13765.php
441440:2006/05/20(土) 04:03:21
ごめんなさい、速攻で解決してしまいました。
thread/src/one.cppの121行目の部分を
return ice_wrapper(&InterlockedCompareExchange, dest, exch, cmp);

から
return InterlockedCompareExchange(dest, exch, cmp);

にダイレクトに呼び出したらうまくいきました。
#defineマクロの所為らしい。

お騒がせしました。
442デフォルトの名無しさん:2006/05/20(土) 21:08:53
intrusive_ptrでCOMオブジェクトを作成するときとかに余分な手間発生しない?

class HogeContainer {
 intrusive_ptr<IHoge> m_hoge;
public:
 void Create() {
  IHoge* tmp;
  foo->CreateHoge( &tmp );
  m_hoge = tmp;
  tmp->Release();
 }
};

トータルではRelease系の関数無くなってて便利なのは分かるんだが。
なんか上手い方法ないかなあ
443デフォルトの名無しさん:2006/05/20(土) 21:17:50
>>442
どこが不満なのかはっきりわからんが、
生成するときのエラーはチェックしろよ。

IHoge* tmp;
if(CreateHoge(&tmp))
{
 m_hoge = instrusive_ptr<IHoge>(tmp, false);
}
else
{
 throw ...;
}
444デフォルトの名無しさん:2006/05/20(土) 21:38:03
つうか、普通ComPtr使うべ。

instrusive_ptr使う利点って何?
445デフォルトの名無しさん:2006/05/20(土) 21:53:29
すみません。
正直言うとこういうの手を出したの初めてなのであんまりよく知らないんで…
なんか色々とあるんですね
446デフォルトの名無しさん:2006/05/21(日) 11:01:22
boost::bindについて質問です。

class A {
public: std::string foo() { return std::string("aaa"); }
};
int main() {
A *a = new A();
std::string s = boost::bind(&A::foo ,a)();
std::cout << s.c_str() << std::endl;
}

上記コードは正しく aaa を吐き出しますが
main()内の2行目を
const char* q = boost::bind(&std::string::c_str, boost::bind(&A::foo ,a))();
にするとうまく動きません。( boost::bind(&A::foo, a)() としても同様 )
どなたかご教授頂ければ幸いです。
447デフォルトの名無しさん:2006/05/21(日) 12:32:00
>>446
class A {
public: std::string foo() { return std::string("aaa"); }
};
int main() {
A *a = new A();
const char* q = boost::bind(&std::string::c_str, boost::bind(&A::foo ,a))();
std::cout << q << std::endl;
}
で動くけど(環境はg++ 3.3.5)
エラーメッセージはどんな感じなの?
たぶん膨大なんだろうけど...
448デフォルトの名無しさん:2006/05/21(日) 12:47:59
>>446
#include <boost/bind/protect.hpp>
const char* q = boost::bind(&std::string::c_str, boost::protect(boost::bind(&A::foo ,a))())();
でだめなら諦める。
449デフォルトの名無しさん:2006/05/21(日) 13:17:56
>>447 >>448
レスありがとうございます。

特に>>447さん 説明不足でした。
「うまく動かない」というのは aaa を出力せずに 何も出力されない事を言います。
エラーメッセージは出ていません。コンパイラはVC++.net 2002(VC7.0)のものです。

そして >>448 さんのコードでも出力されませんでした…
boost::protectは見たこともなかったので、もう少し調べてみます。
450デフォルトの名無しさん:2006/05/21(日) 13:29:25
> const char* q = boost::bind(&std::string::c_str, boost::bind(&A::foo ,a))();
この文が終わった時点でfooの戻り値である一時オブジェクトの寿命も終わっただけではないのか?
451447:2006/05/21(日) 13:29:59
>>449
>「うまく動かない」というのは aaa を出力せずに 何も出力されない事を言います。
こちらの環境では447でaaaが出る
参考までに
452デフォルトの名無しさん:2006/05/21(日) 14:08:36
>>450
環境にもよるだろうけどこの程度コードなら「たまたまうまくいく」がまかり通るとおもうけど?
453デフォルトの名無しさん:2006/05/21(日) 14:19:40
>>452
一時オブジェクトの扱いがvcとgccで違えば結果も違ってくる
454447:2006/05/21(日) 14:22:05
>>452
「まかり通る」をどんな意味で使ってるのか分かんないけど
そんなのに依拠したコードは気色悪いよ
455446:2006/05/21(日) 14:33:36
様々なレスありがとうございます。
>>450
たぶん、こちらのコンパイラではその説が正しいかと思います。
strcpy(q, boost::bind(&std::string::c_str, boost::bind(&A::foo ,a)())());
と書き換えたら、正しく aaa が出力されました。
そうすると、>>451=>>447さんの環境で動いたのは、>>453さんの仰る通りでしょうか。
これが正しければ寿命の関係から直接 const char* q に入れるのは諦めですね。
456デフォルトの名無しさん:2006/05/21(日) 14:40:36
const char* q = std::string("aaa").c_str();
std::cout << q << std::endl;

と同じ意味だから、要するに鼻から悪魔。
457デフォルトの名無しさん:2006/05/21(日) 14:56:21
>>455
>そうすると、>>451=>>447さんの環境で動いたのは、>>453さんの仰る通りでしょうか。
453の「一時オブジェクトの扱い」を一時オブジェクトのスコープと解すると,それは間違い
そうではなくて単にqの指し示すアドレスにある残骸がたまたま表示されてるのだろう
以下のコードでg++でも一時オブジェクトは適切なタイミングで壊されていることが確認できる
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <boost/current_function.hpp>
class String: std::string {
typedef std::string Base_;
public:
String (const char *p): Base_ (p) {std::cout << BOOST_CURRENT_FUNCTION << std::endl;}
~String () {std::cout << BOOST_CURRENT_FUNCTION << std::endl;}
const char *c_str () const {return Base_::c_str ();}
};
struct A {
String foo() { return String("aaa"); }
};
int main() {
A *a = new A();
const char* q = boost::bind(&String::c_str, boost::bind(&A::foo ,a))();
std::cout << q << std::endl;
}
458デフォルトの名無しさん:2006/05/21(日) 17:21:47
>>453
そうだよね、環境が違えば扱いは変わるよね

同じ日本語でも
男が「愛してるよ」というのは一時オブジェクトだが、
女はそれをstaticなオブジェクトだと勘違いする
そこら辺がトラブルの元だな
459デフォルトの名無しさん:2006/05/21(日) 19:57:44
static constじゃないと駄目でないか
460デフォルトの名無しさん:2006/05/21(日) 19:58:47
virtualな女以外もう認められない
461デフォルトの名無しさん:2006/05/21(日) 20:41:08
「愛してるよ」Object のlifetimeはsex終了までなんですね、男の場合は
462デフォルトの名無しさん:2006/05/21(日) 20:54:44
>>461
Commandパターン使えばいいのかな?
463デフォルトの名無しさん:2006/05/21(日) 23:00:43
女性は典型的なsingleton症候群だと言いたいのですか?
464デフォルトの名無しさん:2006/05/21(日) 23:16:49
Factryメソッドで実装すれば交際相手が簡単に交換できるよ
465デフォルトの名無しさん:2006/05/21(日) 23:30:11
マルチスレッドとかメンドクサイよね。
そこで >>438 なわけだが。
466デフォルトの名無しさん:2006/05/21(日) 23:35:10
実際thread周りでどこら辺に不満感じているか聞きたいかも
個人的にはとりあえずpoolが欲しい
467デフォルトの名無しさん:2006/05/21(日) 23:45:16
この流れでそうくるか。ネタの続きなのか?
468466:2006/05/21(日) 23:47:10
どっちでもいいよw
469デフォルトの名無しさん:2006/05/22(月) 00:03:55
マルチスレッドにすれば同時に何人もの異性と交際しても大丈夫だよね
470デフォルトの名無しさん:2006/05/22(月) 00:08:12
デッドロック発生して全部パーになるかもしれないから気をつけな
471デフォルトの名無しさん:2006/05/22(月) 00:11:22
Exceptionのハンドリングを怠るとスレッドがアポーンしちゃうんだよね、怖い怖い
472デフォルトの名無しさん:2006/05/22(月) 00:55:26
スレッドプールってつまりとっかえひっかえってことか
473デフォルトの名無しさん:2006/05/22(月) 00:57:29
キープってやつじゃないか?
474デフォルトの名無しさん:2006/05/22(月) 00:59:37
>>471
フツー、スレッド単体じゃなくてプロセスごと死なない?
475デフォルトの名無しさん:2006/05/27(土) 11:34:17
リソースリークしまくりなんだろうなあ
476デフォルトの名無しさん:2006/05/27(土) 13:03:10
ところで、TMPってどうよ?
477デフォルトの名無しさん:2006/05/27(土) 14:25:05
スタートレック The Motion Pictureのことか?
478デフォルトの名無しさん:2006/05/29(月) 07:01:03
Borland C++(無料版)でBoost.Rangeが使えないというのは意外だった。
MPLのヘッダをインクルードしているのでだめだった。
479デフォルトの名無しさん:2006/05/29(月) 07:44:52
このスレでは相手にされてないです。> Borland
480デフォルトの名無しさん:2006/05/29(月) 07:52:25
もう信頼を失ったからね
481デフォルトの名無しさん:2006/05/29(月) 08:14:24
時々でいいから Metrowerks のことも思い出してあげてください。
482デフォルトの名無しさん:2006/05/29(月) 15:00:30
Metroは8と9は標準に適合しているらしいよ。
-iso-templates付けると。付けないと過去の互換モードらしい。
使ったことなくて、
http://womble.decadentplace.org.uk/c++/template-faq.html
ここの情報だけで語っている。
483デフォルトの名無しさん:2006/05/29(月) 15:26:49
Borlandといえばもう何年も前に次のC++ Builderではtemplateのexportもサポートするぜ!とかほざいてた気がするんだが。
484デフォルトの名無しさん:2006/05/29(月) 16:03:19
export廃止でいいよ!
485デフォルトの名無しさん:2006/05/29(月) 22:26:21
>>481
おまい、綴りが違わねえか?
486デフォルトの名無しさん:2006/05/29(月) 22:26:55
exportって処理系作る人のこと何も考えてないよな
487デフォルトの名無しさん:2006/05/29(月) 22:31:33
>>485
CodeWarriorだしたとこならMetrowerksで正しいと思うが
488485:2006/05/29(月) 23:19:58
>>487
スマン、俺の勘違いだった
Metroworksと覚えてた
ここは、得意の英語で誤るよ
I'm sorry for that.
489デフォルトの名無しさん:2006/05/30(火) 20:53:55
>>488
> ここは、得意の英語で誤るよ
日本語は得意でないようですね
490488:2006/05/30(火) 21:27:17
>>489
ホントだ
謝るが誤るだ
情けねえ....
491デフォルトの名無しさん:2006/05/30(火) 21:31:34
昨日突っ込もうとしたが、誤った英語(拙いという意味で)を使うという
ハイブローなギャグかと深読みし、思いとどまってしまった俺。
492481:2006/05/30(火) 22:06:10
つーか、謝るんなら>>487じゃなくて、俺に謝れ。
493デフォルトの名無しさん:2006/06/02(金) 08:09:21
つーかMetrowerksもうねえよ
494デフォルトの名無しさん:2006/06/02(金) 10:29:42
freescaleに変われたんだっけ?
CodeWarriorは?

まだconfig/compiler/metrowerks.hppしかないけど、
CodeWarriorは9ってのは出ているの?
495デフォルトの名無しさん:2006/06/02(金) 21:16:28
工事中みたいなアイコンがもう見れないのかな
496デフォルトの名無しさん:2006/06/02(金) 23:55:30
じゃあ、みんなでお葬式をしてやろうぜ
497デフォルトの名無しさん:2006/06/02(金) 23:56:27
>>496
香典が勿体ない
498デフォルトの名無しさん:2006/06/03(土) 02:17:35
BOOST_PP_ENUM_TRAILING_BINARY_PARAMS
ってどういう経緯でこのネーミングなの?単語見ても動作が分かりにくいんだけど
499デフォルトの名無しさん:2006/06/03(土) 02:27:59
さぁ
500デフォルトの名無しさん:2006/06/03(土) 03:30:13
>>498
何が分かりにくいかわからんのだが…

プリプロセッサで継続する二項パラメータを列挙する だろ
501デフォルトの名無しさん:2006/06/03(土) 04:53:58
>>500ぱっと見て動作が分かりますか?調べないと無理じゃない?
502デフォルトの名無しさん:2006/06/03(土) 05:10:40
>>501
名前見て動作を理解できるものなどほぼ無い
503デフォルトの名無しさん:2006/06/03(土) 10:10:29
>>501
ぱっと見て動作が分かるネーミング例を出してみろよ
504デフォルトの名無しさん:2006/06/03(土) 10:33:05
abort
505デフォルトの名無しさん:2006/06/03(土) 10:37:20
CreateWindow
506デフォルトの名無しさん:2006/06/03(土) 10:40:30
違う

BOOST_PP_ENUM_TRAILING_BINARY_PARAMS
に代わるネーミング例だ
507デフォルトの名無しさん:2006/06/03(土) 10:50:09
BOOST_プリプロセッサで継続する二項パラメータを列挙する
508デフォルトの名無しさん:2006/06/03(土) 10:58:43
殺意を覚える回答だな
509デフォルトの名無しさん:2006/06/03(土) 13:01:07
さほどおかしなネーミングとも思えないけどなぁ
510デフォルトの名無しさん:2006/06/03(土) 13:11:00
>>503が正論だな。

そもそも処理が複雑なんだから、
一度覚えて、後から思い出せればいい。
511デフォルトの名無しさん:2006/06/08(木) 22:02:36
read_write_mutexってデッドロック問題で削除されたみたいだけど
もう復活しないの?
512デフォルトの名無しさん:2006/06/14(水) 05:55:24
Boost.StringAlgoって標準入りの予定はあるの?
513デフォルトの名無しさん:2006/06/17(土) 14:30:32
boostのRTTIに対するスタンスってどんなんでしたっけ?
spirit & phoenix & functionで組んだらRTTIのせいか
オブジェクトがやたらでかくなった(g++ -O2 / -g無し)。

shared_ptr.hppですらtypeid使ってるみたいで、-fno-rttiだと
コンパイルすらできないのは痛い。
514デフォルトの名無しさん:2006/06/17(土) 16:38:18
>>513
BOOST_NO_RTTI ってのが提案されてたのを見つけた。
http://lists.boost.org/Archives/boost/2005/01/78468.php

実際に追加されてるかどうかは未確認。
515513:2006/06/17(土) 18:26:23
1.33.1では無いみたいです。

そもそもg++はRTTIの有り無しのオブジェクトを混ぜてリンクできるくせに
(RTTI無しのオブジェクト内で生成したオブジェクトをRTTI有りの
オブジェクト内で受け取ってtypeidが呼べる。結果は0xへの参照が帰ってく
るみたい)ファイル内にtypeidが混ざっているだけでコンパイル出来ないっ
てのは激しく片手落ちな感じがする。

templateの使用時の事を考えるとtypeinfoの有無はクラス毎に指定したい。
C++0xで入れてくんないかな。っていうか今すぐほすぅい。
516デフォルトの名無しさん:2006/06/17(土) 18:28:19
つか、もはやRTTI無しではC++とは言えないから対応しないんじゃないか?
517513:2006/06/17(土) 18:47:31
どっちかつうと私もそういう考えなんだけど、
explassion template(spirit/bind)的な使いかたすると型名が
凶悪に長くなる。もはやコンパイラの実装の問題では済まない
レベルだと思う(バイナリサイズが3倍近くになる)
518デフォルトの名無しさん:2006/06/17(土) 23:16:09
>>517
そういう目的で作られるクラスには virtual な関数が無いだろうから、
RTTI は生成されないんじゃないの?
519デフォルトの名無しさん:2006/06/17(土) 23:20:25
なんでやねん
520デフォルトの名無しさん:2006/06/17(土) 23:30:02
virtula な関数が無ければ、実際に typeid を適用するまで RTTI が必要にならないから。
実際に typeid 使ってるなら変わらないけど。
521デフォルトの名無しさん:2006/06/18(日) 00:01:56
>>519
virtualな関数が無いクラスに対するtypeidは単なる定数式に展開される。
もちろんオブジェクトごとにtypeidが付くこともない。
522513:2006/06/18(日) 00:17:25
>>518
>そういう目的で作られるクラスにはvirtualは無い
そうでも無い気がするけど。

少なくともspiritで言えば "aaa>>(bbb|ccc)"みたいに
生成したクラスはrule<>のような型に入れるしかなくて、
その結果、仮想関数使って実際の型に飛ばすしかない。
ただ、それって単なる実装でしか無い気がするし。

組み込みのこととか考えると、virtualを持っているだけで
型情報を組み込んじゃうってのはあまりに安直なような気がする。
523デフォルトの名無しさん:2006/06/18(日) 00:30:40
つか、virtual関数を持ったクラスならvtabがあるので、RTTIを入れてもインスタンス
単位のオーバーヘッドにはならない(賢い実装ならば)んだけど。
524デフォルトの名無しさん:2006/06/18(日) 00:34:14
>>522
function なんかは RTTI によるコードの膨張を嫌って
仮想関数を使わない実装になってる。
spirit もそこらへん改良できるかもね。
525デフォルトの名無しさん:2006/06/18(日) 08:35:55
>>521
それは「RTTIが生成されない」ってことじゃないでしょう?
実装上の工夫が行われているだけ。
526デフォルトの名無しさん:2006/06/18(日) 13:10:51
>>525
virtual関数を持たないclassのインスタンスは余分なものを持っちゃいけないと
C++の仕様で定義されていたと記憶している。

virtualなものが無いのにインタンスごとにRTTIを持つなんてアホな実装が存在
するなら教えて欲しい。
527デフォルトの名無しさん:2006/06/20(火) 18:31:40
コンパイル時に過多に関するあらゆる解決が終了している
ようにかけるところが C++ のいいところだと思うんだが、
もはや RTTI 必須なのか。
528デフォルトの名無しさん:2006/06/20(火) 18:47:47
>>527
virtualが必要なのと同じ理由でしょ。virtualを全く使わなければ>>526の言うように
RTTIの存在自体はオーバーヘッドにならないはずだし。
529デフォルトの名無しさん:2006/06/20(火) 18:48:50
>>527
その通りなんだけど、RTTIを使えるように も 書けるところがC++のいいろことだ。
530デフォルトの名無しさん:2006/06/20(火) 18:56:09
>>529 うん、そりゃ同意。
ただ、Boost みたいなかなり重要なライブラリでは
できれば RTTI を使わずに実現できる部分は
そうしてほしかったな、と。
531デフォルトの名無しさん:2006/06/21(水) 04:10:44
>>530
それは正論だから、ほんとでやる気と時間があるなら >>514 のやつを
進めてサブミットしてほしい。
532デフォルトの名無しさん:2006/06/27(火) 01:12:13
let's boostが403なのは俺だけ?
533デフォルトの名無しさん:2006/06/27(火) 01:32:11
>532
俺もだが数時間前は普通にアクセスできた。

つか、www.kmonos.net自体403になってるな。
534デフォルトの名無しさん:2006/06/27(火) 02:27:33
長い間更新が止まってるから
もうやめるのかな
535デフォルトの名無しさん:2006/06/27(火) 02:42:42
稲葉さんにメールで伝えようとしたけど、メアドを知らないことに気づいた。

>>534
ttp://www.kmonos.net/wlog/ はずっと続けてるぞ。
536デフォルトの名無しさん:2006/06/27(火) 02:59:34
Boost.Lambdaで条件演算子の代替構文ってないのかな?たとえば

bool a = true, b = false;
cout << (_1 ? 5 : 3)(a) << endl; // 5が出力される
cout << (_1 ? 5 : 3)(b) << endl; // 3が出力される

?:はオーバーロードできないからこのコードはコンパイル通らないんだけど、
(_1 ? 5 : 3)に相当するファンクタを別のラムダ式で書き表せないかな?

(3 + _1 * (5 - 3))みたいなのはナシで…。
537デフォルトの名無しさん:2006/06/27(火) 03:28:13
bool a = true, b = false;
(if_(_1)[cout << constant(5)].else_[cout << constant(3)])(a); // 5を出力
(if_(_1)[cout << constant(5)].else_[cout << constant(3)])(b); // 3を出力

・・・はさすがにあんまりか。
538デフォルトの名無しさん:2006/06/27(火) 17:08:20
今Let's Boostに行ったら何事も無く表示されたぞ。
539デフォルトの名無しさん:2006/06/27(火) 20:08:40
Boost.Python があるってことは、
C++ プログラムまわりの標準的な glue 言語として
Python がおすすめってこと?
それとも他の言語バインディングもこれから続々登場?
540デフォルトの名無しさん:2006/06/27(火) 21:04:39
>>539
たんにpythonがboost開発者たちにとって主流だからでは。
541デフォルトの名無しさん:2006/06/27(火) 21:17:57
>>540 単にそれだけか。
Visual Studio に IronPython も入ってきたら、
今までは使われていなかったところにも Python が普及していきそう。
542デフォルトの名無しさん:2006/06/27(火) 22:13:43
>>536
if_then_else_return っていうのがあります.

>>539
もちろん後者のはずです.ただし「続々」かどうかは微妙かも知れません.
個人的にも個々の言語の binding が「続々」出てくるよりは,
やはり言語非依存なものを出して欲しいですし.
プロジェクト自体はありますし
http://boost-consulting.com/writing/oopsla04.html),
SOC でもプロジェクトの一例として提示してたので(http://tinyurl.com/m7dat),
気長に待てばそのうち動くもの出てくるとは思いますけれど.
543デフォルトの名無しさん:2006/06/27(火) 22:32:53
Luaとかどう?
luabindつうluaとC++つなぐライブラリあるんだけど
boost使いまくってる。いずれBoost.Phythonみたく
なろうって魂胆なんじゃなかろうか。
544543:2006/06/27(火) 22:41:23
って何気なく書き込んだ後542のリンク先をのぞいたら
luabindと劇似だ。luabindの作者がかかわってるジャン
545デフォルトの名無しさん:2006/06/27(火) 23:49:17
>>539
pythonがほかの言語と比べてその方面に力を入れているから。
546デフォルトの名無しさん:2006/06/27(火) 23:54:39
IronPython なんかもその一つか・・・
http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20051110PythonJH/manifest.xml
これみてかなり感動した。
547536:2006/06/28(水) 00:01:50
>>542
ありがとう。これでできました。
if.hppが必要なことに気付くのに10分くらいかかったけど(汗

#include <boost/lambda/if.hpp>

bool a = true, b = false;
cout << (if_then_else_return(_1, 5, 3))(a) << endl; // 5が出力される
cout << (if_then_else_return(_1, 5, 3))(b) << endl; // 3が出力される
548デフォルトの名無しさん:2006/06/28(水) 01:44:18
>>546
ttp://d.hatena.ne.jp/Wacky/20051127/1133069066
ここでMSDN TVの内容をまとめてあるけどすごい。
549デフォルトの名無しさん:2006/06/28(水) 02:23:02
しかしBoostの中でもBoost.Pythonは浮いてる感じだよなぁ。
550デフォルトの名無しさん:2006/06/28(水) 04:18:32
Pythonの世界支配の戦略の一環なんだよ
Pythonは選ばれた言語らしい
551デフォルトの名無しさん:2006/06/28(水) 06:06:18
linuxのパッケージの中みても.pyなファイルって結構あるしねぇ
552デフォルトの名無しさん:2006/06/28(水) 08:38:56
まあ、インストーラからpyだったりするしな
553デフォルトの名無しさん:2006/06/28(水) 09:07:45
Boost の言語バインディングは今のところ Python と
Lua だけみたいだけど、言語依存部分と言語バインディング
全般に必要な部分との切り分けがきちんとされればいいね。
いや、俺にはそんな議論に参加する能力ないんだけど。
554デフォルトの名無しさん:2006/06/28(水) 22:49:39
>>553
つ[swig]
555デフォルトの名無しさん:2006/06/28(水) 23:06:54
>>543
それは, luabind は元々「Boost.Python に触発されて」っていう開発動機があったはずなので,
(将来的に変わるかも知れませんが)方向性が Boost.Python ぽくなるのは必然かと.

>>553
luabind は Boost に入ってないですよ.

>>554
Boost.Python あるいは luabind などが,先行の SWIG
(あと,例えば Python 限定なら SIP とか)などと完全に一線を画している部分として,
後者が独立した IDL を使用するのに対して,前者は TMP などを駆使して
純粋な C++ による DSEL で IDL を提供する方向性を確固たるものにしていて,
(各々の方向性の得失は置いておくとして)
そういう部分ではかなり方向性が違うんですよね.
556デフォルトの名無しさん:2006/06/28(水) 23:11:32
>>549
でも、実際に使ってみるとコンパイルに掛かる時間で「やっぱりBoost一族だな」と思うよw
557デフォルトの名無しさん:2006/06/28(水) 23:28:02
>>556
コンパイルしてると困憊るってか
おまい、今時pentiumとか使ってるんじゃないのか?
558543:2006/06/28(水) 23:59:20
>>555
その様ですね。Pythonはいじったこと無く必然的に
Boost.Pythonもノーマークだったので気付かなんだ。

luabind使ってて思うのはあまりにゴージャス過ぎるって
事。方向性として、極力Wrapperを書かずに既存のクラス
等をLuaに公開しようとしているためか暗黙の変換が多そう
で怖い。lambda/bind等で転送関数を書けるようにする、
程度の方が安心なんだけどねぇ。まぁ、便利なんだけど。
559デフォルトの名無しさん:2006/06/29(木) 00:03:30
>>557
いや、icc -ipoするとXeonでも合間に珈琲買って来れる。
560デフォルトの名無しさん:2006/06/29(木) 06:40:21
A Domain-Specific Embedded Language (DSEL) is
a library that provides a miniature language-within-a-language
for solving problems in a particular domain.

Boost の DSEL って early-bound (compile time) なのか
late-bound (runtime) なのかどっちなんだろうね。
って、ソースも読まずにカキコ。
561デフォルトの名無しさん:2006/06/29(木) 20:45:33
Domain-Specific
ってどういう意味?
562デフォルトの名無しさん:2006/06/29(木) 22:33:27
3Dツールのプラグイン言語とかゲームのスクリプト言語とか
対象(取り扱う問題の)領域が限定されてる内部言語のこと。
563デフォルトの名無しさん:2006/06/30(金) 00:16:11
「汎用」の対語みたいな使い方。
564デフォルトの名無しさん:2006/06/30(金) 00:18:59
Generic の反対みたいなことか。
あ、でもプログラミングの世界でジェネリックって言うと
また別の意味に取られちゃうなぁ。
565デフォルトの名無しさん:2006/06/30(金) 00:33:23
汎用だとGeneral Purposeとかじゃね?
566デフォルトの名無しさん:2006/06/30(金) 00:44:49
General Protection Fault!
567デフォルトの名無しさん:2006/06/30(金) 01:10:25
専用でいいじゃない
568デフォルトの名無しさん:2006/06/30(金) 07:20:33
Special?
569デフォルトの名無しさん:2006/06/30(金) 09:59:20
DSLとDSELってどう違うの? なにをどうEmbeddedするのさ
570デフォルトの名無しさん:2006/06/30(金) 10:11:14
用語なんて気分の問題だよ
571デフォルトの名無しさん:2006/06/30(金) 10:22:36
もともとの DSL は単体で動く処理系のこと。
DSEL は、親言語に埋め込まれて動作する。独立性は薄いとか親言語の制約を
受けるとかがあるが、親言語で書いたことをそのまま渡しやすい。

でもまぁ今は DSL というと後者だな。
572デフォルトの名無しさん:2006/06/30(金) 10:49:09
うちはADSLだ・・・
573デフォルトの名無しさん:2006/06/30(金) 13:31:52
俺はDSBLのお世話になてる
574デフォルトの名無しさん:2006/06/30(金) 23:50:07
>>564
Generic医薬品のGenericでしょ
575デフォルトの名無しさん:2006/06/30(金) 23:51:22
>>568
スペシャルって言い方には、Hな雰囲気が漂ってます、どして?
576デフォルトの名無しさん:2006/07/01(土) 00:01:21
マッサージとか
577デフォルトの名無しさん:2006/07/01(土) 00:14:45
- お客さん、スペシャルしますか?
う〜ん、どうしよ
- 気持ちイイよ
じゃあ、お願い

こんな感じだろうか....スペシャル、お願いします
578デフォルトの名無しさん:2006/07/01(土) 00:27:01

夜更けにアジア系外国人と思わしき女性が
マッサージのポン引きをやっている(多分違法)
のをみてスルーしようとしたんだが

 「 き も ち い い よ 」

579デフォルトの名無しさん:2006/07/01(土) 00:56:25
プログラミングで疲れた頭と心を癒すのは、スペシャルなんですねえ
580デフォルトの名無しさん:2006/07/01(土) 19:15:38
fusion が accept されたり、WG 論文リスト更新されたりしてるけど、
ここも C++0x スレもいまいち盛り上がらんね。

まあ俺は毎日楽しんでるけどな
581デフォルトの名無しさん:2006/07/01(土) 20:41:00
C++で開発ってのは、今や限られてるしね
Firefoxの拡張作ろうと思ったけど、
互換性の問題からtemplateやexception使うの推奨されてない。
Boost使いたいけどあきらめるしかないかな。
582デフォルトの名無しさん:2006/07/01(土) 21:48:16
>>580
付いていくのに必死すぎて、ここで話題にする気にはなれんw
583デフォルトの名無しさん:2006/07/03(月) 19:46:48
tuple使ったときのargument is not used. 警告テラウザス
584デフォルトの名無しさん:2006/07/03(月) 23:50:22
コンパイラの設定で切ればいいだけやん
585デフォルトの名無しさん:2006/07/04(火) 23:23:51
ちょっと聞きたいんですけど、boostのrandomって
MT法使うとして、毎回範囲を変えるのは無理です?

まぁ、大きな数字を指定しておいて、
毎回 rand() % max ってやればいいんですけど…
586デフォルトの名無しさん:2006/07/04(火) 23:25:55
そう言えば、MAXがnew アルバム出したらしいね、評判はどうなんだろ
587デフォルトの名無しさん:2006/07/04(火) 23:45:31
shared_ptrとmove_ptrの違いが分かりません><
588デフォルトの名無しさん:2006/07/05(水) 07:26:05
>585
前テキトーにサイコロプログラム書いた時は
[0, 1)の範囲で(一様実数分布で)乱数出して、n面体サイコロ振りたいときはfloor(rand_gen() * n) + 1とやってた
(rand_genはvaliate_generator型)

nによっては分布に影響があるかもしれんが検証してない
589デフォルトの名無しさん:2006/07/05(水) 08:20:28
variate_generatorだった
590デフォルトの名無しさん:2006/07/05(水) 08:49:49
>>585
uniform_int<>(0, max)(rand)
じゃダメ?
591デフォルトの名無しさん:2006/07/05(水) 12:47:21
便乗。
[0.0,1.0) じゃなくて [0.0,1.0] の場合は、
uniform_int から作るしかないかな?
592デフォルトの名無しさん:2006/07/05(水) 14:10:37
>>591
実数で、0.0と1.0の両方が必要なのってどんな場合?
(0.0, 1.0]なら解るんだけど。
あと、uniform_intからどうやって作るの?
593デフォルトの名無しさん:2006/07/05(水) 14:23:15
まあ離散的な分布なら作れるだろうけど。
594デフォルトの名無しさん:2006/07/05(水) 16:58:41
連続一様分布で (0.0, 1.0),(.0.0, 1.0],[0.0, 1.0),[0.0, 1.0] の
差異を気にする必要があるのってどんな場合なんですか?
boost::uniform_01 の実装だと,仮数のビットが完全にランダムに
生成されるので,例えば IEEE754 倍精度少数だと 2^52 もしくは 2^51 に
1回のイベントの生起を気にしていることになりますけれど,そのレベルの
一様性を気にするアプリケーションって超大規模シミュレーションぐらいしか
ないように思えるんですけれど.
595デフォルトの名無しさん:2006/07/05(水) 20:24:07
>>594
逆に言えば、そのような超大規模シュミレーションにも
使えるような汎用性をBoostは持っているということではないか。
596デフォルトの名無しさん:2006/07/05(水) 23:03:18
>>594
0.0や1.0が定義域に含まれない場合に、困るでしょ。
乱数の質の問題じゃなくて、計算の健全性の問題になってくるので。
597デフォルトの名無しさん:2006/07/05(水) 23:17:14
その逆のケースの話をしてるんじゃないのか?
598591:2006/07/05(水) 23:51:33
591 だけど、とりあえず実用上問題ないってのは十分承知してるんで、
そこんとこはおいておいてくれ。

>>592
例えば、ゲーム作りとかで「半径xm以内にランダムでばらまく」みたいな仕様が
書かれてたら、まず普通に [0, x] と考えるじゃない。
Cの時代はそもそも rand() が [0, RAND_MAX] だったから、
RAND_MAX で割ればそのまま [0, 1] になったけど、
そういうソースをそのまま uniform_01 * x に置き換えただけじゃ
厳密には同じじゃないよね、って話。
まあ実用上は(ry だけど、596 の言う計算の健全性の問題っつうか。

>594
uniform_01 の精度って渡される乱数生成器の min と max に依存してない?
RNG::result_type が integer で、min〜max が狭いと、差が出てくるような
気がするんだけど、ちゃんと見てないんで違ってたらスマソ。
まあ普通はメルセンヌツイスタとか使うし実用上は(ry なわけだけども。
599594:2006/07/06(木) 02:36:14
>>596
あ,そういう話ならもちろんそのとおりですね.
594 では, [0.0, 1.0] な一様乱数を片側もしくは両側が開な一様乱数で生成しても
実用上ほとんどのアプリで問題ないという話しかしてませんでした.すいません.

>>598
あ〜,実装は確かにベースとなる UniformRandomNumberGenerator が生成する
乱数の precision がそのまま uniform_01 の precision になりますね,これ.
ドキュメントでこれは buggy だと言ってるので問題として意識されては
いるようですけれど,書いてあるように効率的な実装は難しそうですね.
600デフォルトの名無しさん:2006/07/06(木) 12:16:05
Generator と Distribution を分けるという考え方は分かるんだが、
Generator に精度に関する情報がないので、uniform_int の operator() とか
result_type,min,max 等をごにょごにょしてて必要以上に重くなってる気はする。

と、ググったらこんなのも。
ttp://d.hatena.ne.jp/minamijoyo/20051101
601デフォルトの名無しさん:2006/07/06(木) 13:40:13
>>585
valiate_generator::distribution() に新しい範囲で初期化した
distribution インスタンスを代入すればいい。
602デフォルトの名無しさん:2006/07/06(木) 13:45:47
>>587

auto_ptr と move_ptr の違いってならともかく、
所有権の移動と共有じゃ全然違うじゃん
603デフォルトの名無しさん:2006/07/06(木) 17:59:21
メルセンヌツイスタって初めて聞いたからググってみたら
ウィキペディアにこんなこと書かれてた
>高品質の乱数
乱れているのに高品質ってワロタ
604デフォルトの名無しさん:2006/07/06(木) 23:52:45
これは高度な釣りですね
605デフォルトの名無しさん:2006/07/07(金) 00:19:26
乱れ方が上品なんだよ。
606デフォルトの名無しさん:2006/07/07(金) 00:24:52
本気か演技か、ってことか。
607デフォルトの名無しさん:2006/07/07(金) 00:31:21
知的な美人局じゃねえのか?
608デフォルトの名無しさん:2006/07/07(金) 01:13:41
昼間は淑女=MT
609デフォルトの名無しさん:2006/07/07(金) 01:52:55
それはもう、身をよじらせ(twist)ます。
610デフォルトの名無しさん:2006/07/07(金) 21:27:41
釣りのつもりなんて全くなかったんだけど
この流れを読んでたら昔の彼女を思い出しました…書くんじゃなかったorz
今は他の男でtwistしてんだろうなぁ.....orz
611デフォルトの名無しさん:2006/07/07(金) 21:40:28
ツイスターゲームとか思い出してしまったではないか。
しかしリアルでやることあんのかあれ。
612デフォルトの名無しさん:2006/07/07(金) 23:18:27
Boost使いには、人生の暗い影が....
613デフォルトの名無しさん:2006/07/08(土) 13:21:55
彼女って想像上の生き物でしょ?ネッシーとかの仲間。
30年生きてるけど、そんな生き物は見たことないし。
614デフォルトの名無しさん:2006/07/08(土) 13:48:07
ウィザードktkr
615デフォルトの名無しさん:2006/07/08(土) 14:04:04
彼方にいる女だから彼女って言うんですよ
616デフォルトの名無しさん:2006/07/08(土) 16:29:04
加持さん乙
617デフォルトの名無しさん:2006/07/08(土) 16:41:04
人生の質
一般人>>>>>>>>>Boost使い
618デフォルトの名無しさん:2006/07/08(土) 18:50:20
>>613
あと10年でワシのような大魔法使いになれるぞえ orz
619デフォルトの名無しさん:2006/07/08(土) 23:07:08
導師!
MPLの実装を読み解くには何年かかりますか?
620デフォルトの名無しさん:2006/07/08(土) 23:49:12
2 年ぐらいかな?
色々勉強になったよ。
621デフォルトの名無しさん:2006/07/09(日) 01:00:40
std::vector<int> v;
void func(const int n){}
std::for_each(v.begin(), v.end(), func);
というのがありまして、この std::for_each(〜〜) 自体を
boost::function0<void> に突っ込もうとし、boost::bindで
bind(for_each, bind(vector<int>::begin, &v), bind(vector<int>::end, &v), func);
こんなのを書いているのですが、テンプレート引数を付けたり弄ったりしても
なかなかコンパイルが通りません。
何方かご教授お願いいたします。
622デフォルトの名無しさん:2006/07/09(日) 01:26:07
std::vector<int> v;
boost::function0<void> f( boost::bind(&std::for_each<std::vector<int>::iterator, funcの型>, v.begin(), v.end(), func) );
623デフォルトの名無しさん:2006/07/09(日) 01:29:32

v.begin(), v.end()は
boost::bind(&std::vector<int>::begin, &v), boost::bind(&std::vector<int>::end, &v)
に置き換えて
624デフォルトの名無しさん:2006/07/09(日) 02:08:11
std::vector<int>を適切な名前でtypedefして、
Boost.RangeEx使ったらもう少し簡潔に書けると思う。
625デフォルトの名無しさん:2006/07/09(日) 03:24:51
>>622-623
コードまでも、ありがとうございます。
VC7.0 と gcc 3.4.4 (Cygwin) の両方で
そのまま書いてみたのをコンパイルしたのですが、こちらではコンパイルが通りませんでした(vc7.0とgcc3.4)
エラーがずらーーーーーっと…。そして、

boost::bind(&std::vector<int>::begin, &v);
この部分だけコンパイルしてみてもダメだったので
boost::bind(static_cast<std::vector<int>::iterator (std::vector<int>::*)(void)>(std::vector<int>::begin), &v);
こうすると一応できたのですが
その後boost::bind(std::for_each, 〜〜)に入れようとするところでどうしても躓きます…
626デフォルトの名無しさん:2006/07/09(日) 06:20:54
>>boost::bind(&std::vector<int>::begin, &v);
これがダメな時点で無理な気もするが
VS2005でならこれで動いたよ。

vector<int> v;
v.push_back(0);
v.push_back(1);
//for_each<vector<int>::iterator, function<void (const int)> >(v.begin(), v.end(), func);
function< function<void (const int)> (void)> f =
bind(for_each<vector<int>::iterator, function<void (const int)> >
,bind(&vector<int>::begin, &v)
,bind(&vector<int>::end, &v)
,func);
f();
627デフォルトの名無しさん:2006/07/09(日) 08:30:56
このほうが正確かな

vector<int> v;
v.push_back(0);
v.push_back(1);
typedef void (*function_pointer)(const int);
//for_each<vector<int>::iterator, function_pointer>(v.begin(), v.end(), func);
function<function_pointer (void)> f =
bind(for_each<vector<int>::iterator, function_pointer>
,bind(&vector<int>::begin, &v)
,bind(&vector<int>::end, &v)
,func);
f();
628デフォルトの名無しさん:2006/07/09(日) 13:15:27
これもVC++ 7.1で動いた。
void myfunc(int n) {std::cout << n << ' ';}
int main()
{
    using boost::mpl::identity;
    using boost::bind;
    typedef std::vector<int> vec;
    typedef const vec cvec;
    typedef identity<void (int)>::type func_type;
    typedef identity<cvec::const_iterator (cvec::*)() const>::type cbegend_type;
    typedef identity<func_type* (cvec&, func_type*)>::type rex_for_each_type;

    boost::function0<void> f;
    {
        vec v;
        v.push_back(0); v.push_back(1); v.push_back(2);
        f = bind(static_cast<rex_for_each_type*>(
            boost::for_each<cvec, func_type*>), v, myfunc);
        boost::fill(v, 10);
    }
    f();
    std::cout << std::endl;
}
629デフォルトの名無しさん:2006/07/09(日) 16:00:49
>>626-628
ありがとうございます、参考になります。
gcc 3.4.4 (cygwin) と vc++.net 2002(vc 7.0) の両方で試しましたが、ともに動きませんでした。
7.0だと lambda とかも使えないし、いい加減あきらめてVS2003買ったほうがいい気がしてきました。

ちなみに
typedef std::vector<int>::iterator (std::vector<int>::*_t)(void);
boost::function0<void> f = bind(
std::for_each< boost::_bi::result_traits< std::vector<int>::iterator, _t >::type, void (*)(int) >,
boost::bind(static_cast<_t>(&std::vector<int>::begin), &v),
boost::bind(static_cast<_t>(&std::vector<int>::end), &v),
func);
このコードでならgcc 3.4.4(cygwin)で正常にコンパイル&動作が確認できたのですが
vc7.0だと、なぜか未解決の外部シンボル云々…
630デフォルトの名無しさん:2006/07/09(日) 16:09:42
なぜ今更2003?
2005Expressはタダだし
Stdでも3万円くらいだよ。
631デフォルトの名無しさん:2006/07/09(日) 16:32:01
タダなのは素晴らしいんですが、UI周りが気に入らないのと
βの時の使ってみた感じ、くそ重かったんで・・・なかなか手を出そうとは思えないです。
632デフォルトの名無しさん:2006/07/09(日) 17:47:23
ちなみに、VC7.1のインテリセンスで、
自動パラメータヒントを有効にしたままlambdaを使おうとすると、
自分の環境では、IDEごと固まる。
VC8では、インテリセンスの根性が上がっているのか、そういうことは無いんだけど。
633628:2006/07/09(日) 19:26:09
>>629
俺のはg++ 3.4.4でコンパイルできた。
ヘッダのインクルードが欠けているとかくだらない間違いではないか?
634デフォルトの名無しさん:2006/07/09(日) 19:44:13
VC8はテンプレートのサポートが段違いだから
Boost使いならVC8推奨だけど。
635デフォルトの名無しさん:2006/07/09(日) 20:36:27
>>633
gcc 3.4.4 では、こちらでもコンパイルできました。
そして、そのソースをそのままVC7.0上でコンパイルしようとすると失敗するので
インクルードが欠けているというのは無いと思います。
>>634
まじですか、βのときより軽い事を祈ってExpress入れてみようかな…
636デフォルトの名無しさん:2006/07/09(日) 22:17:47
variantを使ったダブルディスパッチの実現が
驚異的に簡単で感動した。

variantとfunctionがあれば継承なんていらんね。
637デフォルトの名無しさん:2006/07/10(月) 02:07:10
>>636
くわしく
638デフォルトの名無しさん:2006/07/10(月) 04:33:49
#include <boost/variant.hpp>

using namespace boost;

class visitor : public static_visitor<> {
public:
void operator () (int n, int m) const {}
void operator () (char n, char m) const {}
void operator () (char n, int m) const {}
void operator () (int n, char m) const {}
};

・・・・
variant<int, char> v0;
variant<int, char> v1;
v0 = int(2);
v1 = int(3);
apply_visitor(visitor(), v0, v1);
v0 = char(2);
v1 = char(3);
apply_visitor(visitor(), v0, v1);
v0 = char(2);
v1 = int(3);
apply_visitor(visitor(), v0, v1);
v0 = int(2);
v1 = char(3);
apply_visitor(visitor(), v0, v1);

細かくははしょってるが察してくれ。
639デフォルトの名無しさん:2006/07/10(月) 11:37:18
boost::regex re

boost:sregex re
の違いは何ですか?
640デフォルトの名無しさん:2006/07/10(月) 12:53:58
641デフォルトの名無しさん:2006/07/10(月) 16:49:58
Boost周辺の事情は全くわかってないんですが
BoostはいつからSTLと同じように使えるようになる見込みなんでしょうか
642デフォルトの名無しさん:2006/07/10(月) 17:20:43
>>641
「STLと同じように」の意味を定義してください
643デフォルトの名無しさん:2006/07/10(月) 20:49:02
>>642
標準ライブラリとしてという意味ジャマイカ
644641:2006/07/11(火) 14:17:48
>>643さんの解釈のとおりです。
コンパイラインスコした時点ですぐに使えるようになるのはいつの日ですかって話です。
それとも、いつまでもアドインのままでいるつもりなんでしょうか。
645639:2006/07/11(火) 14:51:37
>>640
sはstaticの意味でしたか
ありがとうございました
646デフォルトの名無しさん:2006/07/11(火) 15:03:12
>>641
TR1, TR2に含まれるものが2009年に標準になる見込みです。
詳しくはC++0xスレへ
647デフォルトの名無しさん:2006/07/13(木) 01:09:05
2009年なんて10年先じゃんと思ってたら2009年もうすぐになってる
648デフォルトの名無しさん:2006/07/14(金) 09:43:07
そして俺も独身のまま年をとってゆく・・・
649デフォルトの名無しさん:2006/07/16(日) 15:38:04
時が加速する
650デフォルトの名無しさん:2006/07/16(日) 15:49:00
永遠に標準には追いつかない
それが++の意味
651デフォルトの名無しさん:2006/07/17(月) 20:42:23
boost::lambda使ってる人に聞きたいんだけど
CPUでコンパイル速度ってどれくらい違いますか?
AthlonXPの3000+で式3つくらい書いてたら10秒は平気でかかる。。。
買い替えしたいと思ってしまった
652デフォルトの名無しさん:2006/07/17(月) 21:43:34
式3つくらいっていわれてもどんな式か書いてくれんとなあ。
if して for して bind するくらいの式3つでは Pen4M 1.4GHz でも5秒しかかからん。
653デフォルトの名無しさん:2006/07/18(火) 01:21:52
boostって読んだだけで使ったことなかったが
boostが愚か者の道具であることが、今のレスでよく分かった
654デフォルトの名無しさん:2006/07/18(火) 06:35:32
まぁ、思春期ってのはそういう俺発見の連続で出来てるもんさ。
655デフォルトの名無しさん:2006/07/18(火) 11:05:07
$ cat foo.C
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
int main() {
int i = 1; int j = 2;
(_1 + _2)(i, j); // ok

int k = 1;
(_1 = 2, _1 + i)(k);
}
$ time g++ foo.C

real 0m0.997s
user 0m0.908s
sys 0m0.088s

Pentium M 1.4GHzですが、こんだけしかかかりません。
656orz:2006/07/18(火) 13:47:54
657デフォルトの名無しさん:2006/07/18(火) 22:23:39
>>656
これか、唐沢クンの英語はちょっと変だな
それに野晒し状態で今頃彼キレてるんだろうなあ

Can I have a hotfix for this problem?
It is examined VS2003 or VS2005 which to be used for our prodcut.
And this is a big problem to use VS2005.
658デフォルトの名無しさん:2006/07/19(水) 00:38:13
これってVC8じゃ、shared_ptrは使えないってこと?
何か特殊なケースでのみaccess vaiolationなコードを吐くって事なのかな。
659デフォルトの名無しさん:2006/07/19(水) 19:53:36
自分が作るライブラリも boost のファイル配置の
コンベンションに従うことにした。
すがすがしい気分になった。
660デフォルトの名無しさん:2006/07/19(水) 20:12:20
面倒くさいから全部同じフォルダに入れてるぜー
661デフォルトの名無しさん:2006/07/22(土) 05:13:44
おいおい、なんか馬鹿が暴れてるぞ
http://pc8.2ch.net/test/read.cgi/tech/1145115971/

460 名前:デフォルトの名無しさん[sage] 投稿日:2006/07/19(水) 20:42:18
57 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 10:58:30
>>56 プログラム全体にわたっての型の整合性は
コンパイルが通った時点で保証されている、と信じたいから

という発言に対し、

65 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 21:42:52
っていうか、>>57 みたいなこと書くやつは死ねばいいと思う。
お前みたいなド素人がプログラミングでメシ食っていこうなんて百年早い
マジ死ねよ

と返す。
これがBoostスレクオリティ。
662デフォルトの名無しさん:2006/07/22(土) 07:22:38
>>661 うぉ、なつかしっ
そこで引用されている >>57 書いたの俺だ・・・
そんなところで引用されてたとわ!
663デフォルトの名無しさん:2006/07/22(土) 14:37:44
>>662
わざとらしいんだよw
どうせお前だろ?
関係無いスレに泣きついて「だれか僕を肯定してー」なんて馬鹿丸出しwwwwwwwwwwwwwwwwww
664デフォルトの名無しさん:2006/07/22(土) 15:07:20
>>662
おまいをこんぱいるしてやる
665デフォルトの名無しさん:2006/07/22(土) 21:03:14
/**/形式のコメントを正規表現でスペースに変換できますか?
一個のスペースに変換するだけなら
regex("/\\*.*?\\*/")
を" "に置換するだけでいいんだけれど、
/*
hogehoge
foofoo
*/
みたいなのを
/*
        
      
*/
に出来なくて困ってる
666デフォルトの名無しさん:2006/07/22(土) 21:05:16
間違えた
  
        
      
  
みたいに、/とか*とかコメント内の文字をスペース(改行だけはそのまま)に出来なくて困ってます
667デフォルトの名無しさん:2006/07/22(土) 21:36:43
/* char* hoge = "moge*/";uge*/
668デフォルトの名無しさん:2006/07/24(月) 05:06:30
boost::serialization では無限大など非数の double を扱う
ことは出来ないのでしょうか?たとえば xml_oarchive や
text_oarchive に無限大の double を出力すると
1.#INF という文字列で出力されますが、これを再び
読み込もうとすると例外が発生します。

ちなみに非数をストリームに出力したときに実際に出力される
文字列は処理系依存です。
669デフォルトの名無しさん:2006/07/24(月) 06:29:33
boost の xml_{o|i}archive ではスキーマは明示されていないので
参考程度になりますが、一応 XML Schema では float/double の
表現に 0, -0, INF, -INF, NaN が含められています。

自分は XML にシリアライズした後で XST + CSS で表にする
ことがあるので、できればこのあたりは XML Schema に
則ってほしいところですが、xml_{o|i}archive から
派生させたアーカイブクラスを作るべきでしょうか?
670デフォルトの名無しさん:2006/07/25(火) 17:36:58
Boostの.hppって拡張子は実装も書いてあるヘッダって意味でおk?
671デフォルトの名無しさん:2006/07/25(火) 18:02:58
c->c, h
c++->cpp, hpp
672デフォルトの名無しさん:2006/07/25(火) 20:13:31
好みの問題だな
673デフォルトの名無しさん:2006/07/27(木) 00:51:07
ヘッダーファイルって何ですか? by C#使い
674デフォルトの名無しさん:2006/07/27(木) 00:53:02
帰れ
675デフォルトの名無しさん:2006/07/27(木) 06:59:37

読み込まれるファイルを毎回コンパイルする無駄を省くために
本来は import されるファイルのエッセンス部分のみを記述した
ヘッダファイルのみを読み込む方法が利用されていましたが
結果的にヘッダに関数本体を記述する馬鹿やグローバル変数を
記述する阿呆が大量に発生したため次第に使われなくなりました
676デフォルトの名無しさん:2006/07/27(木) 09:31:08
俺もその大馬鹿野郎です。いやむかしはちゃんと分けて書いてたよ。
でもJavaとかC#やった後だと、めんどっちーもん。
VCならコンパイル早いし問題なし。
ソースが増えて重くなったら、その都度変更の少ないクラスからcppに移動。
677デフォルトの名無しさん:2006/07/27(木) 10:43:55
cppにしてもメンバ関数にインラインとかで書くともう
ヘッダなのか本体なのかどうでも良くなってくるんだよね
678デフォルトの名無しさん:2006/07/27(木) 11:35:18
ヘッダに書くインライン関数は型付きマクロだと割り切ってる。
679デフォルトの名無しさん:2006/07/27(木) 13:41:04
>>675
Boost完全否定だな
680デフォルトの名無しさん:2006/07/27(木) 15:42:06
あれだよな。インライン関数とかゴテゴテしたプリプロセッサコーディングとか
個人でやるとキショイとか言われて、メリケンがやるとマンセーするんだよな。

まあ確かに個人レベルでやると他の人が読みにくいが
boostくらい浸透してくれるといくらか通用しやすくてありがたいけどな。
681デフォルトの名無しさん:2006/07/27(木) 23:42:21
>>675
いつの時代の話だ
もう正規表現エンジン全部がヘッダに書かれる時代だよ
682デフォルトの名無しさん:2006/07/27(木) 23:55:55
テンプレートをプリプロセッサの機能にしなければ
ヘッダなんかに書かなくてよかったのになあ。
コンパイルは遅いし、エラーメッセージはわけわからんし。
その点でコンパイラの機能にしているDはよい。
683デフォルトの名無しさん:2006/07/28(金) 00:05:39
>>682
テンプレートは C++ でもコンパイラの機能だよ。
プリプロセッサの機能は C と C++ で変わってない。
684デフォルトの名無しさん:2006/07/28(金) 00:07:38
>>682
テンプレートはコンパイラが処理してますが
685デフォルトの名無しさん:2006/07/28(金) 00:09:59
天麩羅は大好きです
686デフォルトの名無しさん:2006/07/28(金) 00:11:47
テンプレートをヘッダに書かなければいけない理由は、当時のコンピュータの性能の問題が大きかったと思う。
687デフォルトの名無しさん:2006/07/28(金) 00:18:58
最近ジーンズのボタンが締まらなくなった
688デフォルトの名無しさん:2006/07/28(金) 00:35:16
やっぱ、天麩羅の食べ過ぎは良くないよね
そろそろみんなも気付いて欲しいね
689デフォルトの名無しさん:2006/07/28(金) 01:33:26
テンプレートがプリプロセッサなら
エラーメッセージ分かり易かっただろうな
690デフォルトの名無しさん:2006/07/28(金) 14:59:54
682かわいそう・・・
まぁ一度gcc -Eとかしてみよう
691デフォルトの名無しさん:2006/07/28(金) 16:26:39
C++でのテンプレートは所詮テキストの貼り付けに毛の生えたもん
でしかないってのはみんなわかってんだろ?
プリコンパイルヘッダなんてもんは規格外だし。
その意味でプリプロセッサっていってんのに。
テンプレートを CPP が処理してないくらい知っとるわ、ボケ。
いっぺん D のテンプレートを使ってみろってんだ。
692デフォルトの名無しさん:2006/07/28(金) 17:02:06
>>691
独自の用語を使っていると他人とのコミュニケーションが困難になるよ
693デフォルトの名無しさん:2006/07/28(金) 17:54:48
典型的なD厨だ
怖いよ
694デフォルトの名無しさん:2006/07/28(金) 19:18:34
>>691=>>693
自演乙
695デフォルトの名無しさん:2006/07/29(土) 00:35:15
>>691
C++のテンプレートは、
コンパイル時の能力がTuring機械と同等です。
696デフォルトの名無しさん:2006/07/29(土) 02:26:57
Dを仕事で使ってる人って居るのかな?
697デフォルトの名無しさん:2006/07/29(土) 03:12:37
携帯かなんかでD使ったってのは見たことある
698デフォルトの名無しさん:2006/07/29(土) 03:26:01
>>697
自分はC/C++、C#、Javaを使うけど、正直C++が一番好き(スリリングだから)
Dの場合はどう? 面白い? メリットは何?
699デフォルトの名無しさん:2006/07/29(土) 09:45:49
僕は断然 C++ ちゃん!
自分が作ったライブラリがたくさんあるから。

あと、この間、客からGUIカコヨクしろって
無茶言われてパニクったが、C++/CLI で乗り切れたから。
700デフォルトの名無しさん:2006/07/29(土) 10:11:02
>>696
社内ツールだったらそれなりに作ってる
701デフォルトの名無しさん:2006/07/30(日) 10:20:12
>>691=>>682はまじでかわいそうだな・・・
C++のテンプレートをさわってみて、テンプレートについて何か言ってみたかったんだよね。

702デフォルトの名無しさん:2006/07/30(日) 12:55:59
まあそんなところだろうな
池沼ほど自己顕示欲が強いわけだし
703デフォルトの名無しさん:2006/07/31(月) 01:49:58
>>693
Dでも無能かと
要するにただの無能
704デフォルトの名無しさん:2006/07/31(月) 15:46:02
ワーニングレベルを最高にすると、
Visual C++ でも gcc でも
嵐のようにワーニングが出る。
動いているからいいんだけど、
とりあえずワーニングは無視しとけ、ってスタンス?
705デフォルトの名無しさん:2006/07/31(月) 16:00:38
うぉーにんぐ
706デフォルトの名無しさん:2006/07/31(月) 19:39:23
>>704
やっちゃいけない事をやってるからでは。
707デフォルトの名無しさん:2006/07/31(月) 21:27:36
VCの話だが、/Wallを指定しているのではあるまいな
708デフォルトの名無しさん:2006/07/31(月) 23:20:21
>>707 そう。boost ビルドするときに /Wall してみたら
えらいメッセージの量でビビタ。
709デフォルトの名無しさん:2006/08/01(火) 00:02:37
とりあえずここの/W nと/Wall見れ
ttp://msdn2.microsoft.com/ja-JP/library/thxezb7y.aspx

/Wallだと標準ライブラリでさえ警告出た記憶が・・・
710デフォルトの名無しさん:2006/08/01(火) 00:28:16
どうしても/Wallと共存したいなら/wdnで消すか#pragma warningを書いた
ヘッダを1つ間にかますか。どっちも面倒なのは確か。

>709
確かにリリースビルドだと<vector>とかで出る。あれはさすがになんとかしてほしい
711デフォルトの名無しさん:2006/08/05(土) 18:22:27
boost::posix_timeを使おうと
ttp://www.kmonos.net/alang/boost/classes/posix_time.html
のサンプルをコンパイルしてみると
undefined reference to `boost::gregorian::greg_month::as_short_string() const'
undefined reference to `boost::gregorian::greg_month::as_long_string() const'
undefined reference to `boost::gregorian::greg_month::get_month_map_ptr()'
とエラーがでます。
greg_month.hppを調べてみると確かにgreg_month::as_short_string()は
宣言のみで実装がありませんでした。

コンパイル時に何かコンパイルオプションが必要になるのでしょうか?
環境はvine3.2 gcc3.3.2 boost1.33.1です。
712デフォルトの名無しさん:2006/08/05(土) 22:11:26
>>711
ライブラリをリンクしないと駄目なんじゃないか?
713711:2006/08/05(土) 23:32:37
>>712
-lboost_date_time
が必要みたいですね。/usr/libを見てみたらありました。
リファレンスのサンプルに必要なライブラリも書いてくれるといいのですけど。
714デフォルトの名無しさん:2006/08/06(日) 16:26:00
そういや、 auto_link.hpp でオートリンクされるから
今まで気にしてなかったけど、コンパイラ/リンカに
よってはそういうことはできないのか・・・
715デフォルトの名無しさん:2006/08/06(日) 16:50:09
というか大した手間じゃない。
716デフォルトの名無しさん:2006/08/06(日) 23:20:00
bjam と vc8 で x64 のライブラリをビルドしたいのですが vcvarsamd64.bat で
環境変数を設定するだけではできないのでしょうか?
ビルドした DLL を dumpbin で確かめると x86 のバイナリになっていました。
717デフォルトの名無しさん:2006/08/08(火) 14:38:30
教えてください。

typedef boost::function< void (int,int,int)> myfunc;

myfunc ff = boost::bind( &MyClass::test, &m, _1,_2,_3 );
myfunc ff2 = boost::bind( &MyClass::test, &m, _1,_2,_3 );

bool bl = ff.contains( ff2 ); // ここでエラー

これをビルドすると、boost::operator ==' : 4 のオーバーロード関数があいまいです、とでるのですが、
何かよき対処法はないですか?
718デフォルトの名無しさん:2006/08/08(火) 20:09:38
>>717
boost::bindが返す関数オブジェクトにはoperator ==が実装されていないから無理だと思う。
719デフォルトの名無しさん:2006/08/09(水) 10:40:10
boost::progress_timer での経過時間表示のコードを見ると
m_os << elapsed() << " s\n" << std::endl;
ってなってるんだが、\n と std::endl のせいで
余計な改行があくじゃねぇか。
嫌じゃ。
720デフォルトの名無しさん:2006/08/09(水) 20:50:54
boost::filesystem::symbolic_link_exists
ドキュメントでは Windows にはシンボリックリンクないので
常に false 返すよって書いてあるんだけど、せめて
リパースタグを見てマウントポイントとかなら true を
返してくれないものだろうか。
721デフォルトの名無しさん:2006/08/09(水) 20:53:26
園、目当てはテレクラよりは効率よし、また理不尽な請求もナシ
オイラもココでセフレ3人ゲトしますた(^^; 目標セフレ7人!!
http://550909.com/?f4632187
722デフォルトの名無しさん:2006/08/09(水) 20:55:53
>>720
そう思うんなら自分でコード書いて dev に投げれば?
723デフォルトの名無しさん:2006/08/09(水) 21:17:10
>>722
誰がデブやねん!
724デフォルトの名無しさん:2006/08/10(木) 00:10:35
>>720
Vistaのsymbolic linkならそれでいいとおもうけど、
XPのジャンクションなら、チョト違うからfalseの方がいいと思う。
725デフォルトの名無しさん:2006/08/10(木) 00:16:40
>>724 リパースポイント
726デフォルトの名無しさん:2006/08/10(木) 00:59:00
リパーズポイント使って実装してるんでしょ?
リパーズポイントってアドオン系カスタマイズ機構だから。

マウントポイントは、
今ではリパーズポイントの応用として実装されているけど、
シンボリックリンクに近いのは、
マウントポイントじゃなくて、ジャンクションでしょう?
って板違いかな?

いずれにせよVistaで導入されたsymbolic linkなら、
boost::filesystem::symbolic_link_exists
がtrueでいいと思うけど、他はまずいでしょ。
727デフォルトの名無しさん:2006/08/10(木) 01:02:57
あ、蛇足だけどマウントポイントは論外って事ね。
728デフォルトの名無しさん:2006/08/10(木) 01:05:17
そんな洒落た機能がWindowsにあるなんて知らなかったよ
729デフォルトの名無しさん:2006/08/10(木) 07:18:49
Linux 由来のコードでちゃんと symbolic_link_exists で
ディレクトリ全体の処理がループしないようになってたんだが、
Windows にいしょくして見たらループした。

結局どんなタイプのリパースタグを使っているか個別に判定すると
またあとから Windows のバージョンによる移植性の問題が
出る可能性もあるので、 そもそもそういう判定のために
用意されている Windows の NTFS 系の API
IsReparseTagNameSurrogate で判定するのがいいとオモタ。
自分用にはもうコード書いて使っているので、
そのうち dev に投げるかもしれないけど、
boost のプラットフォーム依存部分の書き方の流儀?
(コンベンション)を理解していないので面倒だなぁ。
730デフォルトの名無しさん:2006/08/10(木) 22:34:12
Boost.Numeric.Bindingsを使おうとするとsize1やsize2が定義されてないとかエラーがでる。
uBlasを見ると5/18に関数名がsize_mとsize_Mに変わったらしい。
CVSから5/18以前のやつを取ってきたら動いた。
そんなチラシの裏。

boostディレクトリの中にluabindディレクトリができてたんだけど、
そのうちboostと一緒に配布されるようになるのかな?
731デフォルトの名無しさん:2006/08/10(木) 23:04:02
へー
732717:2006/08/11(金) 17:25:45
>>718

やはり、THANKS
733デフォルトの名無しさん:2006/08/11(金) 22:15:48
vector<A*> vec; //コンテナにオブジェクトのポインタ入れてるときに
..
find_if(vec.begin(), vec.end(), ここでうまいことlambdaにオブジェクトを逆参照させる方法ないですかね
それともこういうときはポインタを受け取る関数オブジェクトを自分で書くべきですか?
734デフォルトの名無しさん:2006/08/11(金) 22:28:04
>>733
うまいことやるまでもなく普通にできると思うが。こんな感じで。
# include <vector>
# include <algorithm>
# include <iostream>
# include <boost/lambda/lambda.hpp>
# include <boost/lambda/bind.hpp>
# include <functional>

namespace lam = boost::lambda;

int main()
{
  std::vector<int *> v;
  v.push_back(new int(4));
  v.push_back(new int(5));
  v.push_back(new int(-3));
  v.push_back(new int(-5));
  std::cout << **std::find_if(v.begin(), v.end(), lam::bind(std::less<int>(), *lam::_1, 0)) << '\n';
}
735デフォルトの名無しさん:2006/08/11(金) 22:35:46
boostに限った話じゃないけど、テンプレを駆使するとかえって可読性を落とす事ってあるよね
特にbind系を使うと

怖いのが慣れちゃうとあまりよみづらいと思わなくなるところ
736デフォルトの名無しさん:2006/08/11(金) 23:33:02
>>734さんに提示していただいたintの例だとうまくいったんですけど
以下のコードのような場合は無理ですかね

class A {
public:
int num;
A(int _) : num(_) {}
};

int main()
{
std::vector<A*> v;
v.push_back(new A(4));
v.push_back(new A(5));
v.push_back(new A(-3));
v.push_back(new A(-5));
std::cout << **std::find_if(v.begin(), v.end(), *lam::_1.num > 0) << '\n';
}

hoge.cc: In function `int main()':
hoge.cc:23: error: 'const struct boost::lambda::lambda_functor<boost::lambda::placeholder<1> >' has no member named 'num'
737デフォルトの名無しさん:2006/08/12(土) 00:07:48
>>736
std::cout << (*std::find_if(v.begin(), v.end(), (boost::lambda::_1->*(&A::num)) > 0))->num << '\n';
738デフォルトの名無しさん:2006/08/12(土) 00:24:08
>>737
できました。ここまでややこしくなるとlambda使う意義がなくなってしまいますね ^^;
>>734,737 どうもありがとうございました。
739デフォルトの名無しさん:2006/08/12(土) 01:06:37
indirect_iteratorはだめか?
740デフォルトの名無しさん:2006/08/12(土) 03:32:57
indirect_funもあるぞ
741デフォルトの名無しさん:2006/08/14(月) 16:16:16
ptr_vectorもあるよ
742デフォルトの名無しさん:2006/08/14(月) 20:28:42
>>737
昔、template スレにあった、IDispatch の呼び出しを行うラッパを思い出した。

pDisp->*("MethodName")( a1, a2 );

みたいな書き方してあってスゲーと思った記憶がある。
743デフォルトの名無しさん:2006/08/14(月) 21:10:15
>>742
それどこにあるの?
是非見てみたい。
744デフォルトの名無しさん:2006/08/15(火) 03:02:15
型そのものからメンバ変数を間接参照するとオフセットになるのか
なるほど。勉強になった
745デフォルトの名無しさん:2006/08/15(火) 07:51:51
メンバポインタってやつだな。
746デフォルトの名無しさん:2006/08/15(火) 09:18:24
>>742-745 が全く理解できねぇ・・・
そもそも COM を使ったことがないからかもしれないけど、
"MethodName" って char* だよね?
747デフォルトの名無しさん:2006/08/15(火) 09:19:48
間違った、>>744-745 は分かるが、その元になってる
>>742 が理解できねぇ。
748デフォルトの名無しさん:2006/08/15(火) 09:29:27
>>746
operator->*は多重定義できる。
749デフォルトの名無しさん:2006/08/15(火) 17:00:29
漏れも理解できね
引数数は固定になっちゃはないの?
なにかミラクルな方法でもあるのかなぁ.....
750デフォルトの名無しさん:2006/08/15(火) 17:48:07
よくわからんけど、operator->*で関数オブジェクトを返して
引数はboostみたいに0〜n個用を用意するとか。
751デフォルトの名無しさん:2006/08/16(水) 06:33:49
->* っていうひとまとまりのオペレータがあるのか?
しらんかった。
752デフォルトの名無しさん:2006/08/16(水) 11:10:57
.* の事も忘れないで下さい。
753デフォルトの名無しさん:2006/08/16(水) 18:19:30
>>752 それなんて正規表現?
754デフォルトの名無しさん:2006/08/16(水) 18:36:22
使ったこと無い演算子だ・・・
とりあえずネットでどっかに簡単な説明ない?
多分低レベルな俺には必要ない知識だと思うが、気持ち悪い。
使ったこと無いと言えば、 typeid も使ったこと無いな。
755デフォルトの名無しさん:2006/08/16(水) 18:39:25
756デフォルトの名無しさん:2006/08/16(水) 18:52:29
>>754
メンバへのポインタでぐぐれ。
757デフォルトの名無しさん:2006/08/16(水) 20:23:07
>>752
多重定義できない演算子ですよ
758デフォルトの名無しさん:2006/08/16(水) 20:29:14
Boostと関係ないことですまんが、
上に出てきたみたいな珍しい演算子がたくさんあって、
しかもオーバーロードできて、しかもその前に
プリプロセッサで変態プレイができるとなると、
見た目何言語かわからん言語にできちゃうよなぁ・・・
だいたい二項演算子[]が可換って(笑

この変態がっ!!
759デフォルトの名無しさん:2006/08/16(水) 20:49:20
>>758
3["abcdefg"]とかCでもできる。
760デフォルトの名無しさん:2006/08/16(水) 20:53:57
>>759 この変態がっ!!
761デフォルトの名無しさん:2006/08/17(木) 00:34:53
[]の外と中が入れ替え可能なのは有名っていうかC FAQにも出てくるくらい。
762デフォルトの名無しさん:2006/08/17(木) 00:41:53
なんで入れ替え可能にしたのかね。
763デフォルトの名無しさん:2006/08/17(木) 00:45:19
したんじゃなくて勝手にそうなっちゃったんじゃね
764デフォルトの名無しさん:2006/08/17(木) 00:49:14
array[index]がarray+indexと等価だったりしたんでないの
765デフォルトの名無しさん:2006/08/17(木) 01:03:39
>>762
x[y] と *(x + y) が等価であることを考えれば当然
766デフォルトの名無しさん:2006/08/17(木) 01:07:26
「当然」とか言っちゃうんだ
767デフォルトの名無しさん:2006/08/17(木) 01:15:42
「 x[y] と *(x + y) が等価」という教え方や実装が広まっていたことが先にあって、
標準仕様の策定でもそれに従ったんだろ。わざわざ入れ替え可能にしたわけじゃ
ないと思う。なんのメリットも無いだろう。
768デフォルトの名無しさん:2006/08/17(木) 01:23:07
わざわざ可能にしたわけじゃないだろうが、Cという言語が生まれたときからx[y]というのは
*(x+y)の意味だと定義されてた(またはそう実装されていることが広く知られていた)わけだ
から、可換であることは自明だし、大昔から有名だよ
769デフォルトの名無しさん:2006/08/17(木) 02:58:52
>>759
これはいつ見ても戸惑う。
最初に見たのは、やたらと遊び心のあるC言語の参考書だったような。
770デフォルトの名無しさん:2006/08/17(木) 03:01:58
そもそも"abcdefg"[3]なんてやらないし
771デフォルトの名無しさん:2006/08/17(木) 05:21:56
>>770 でもさ、16進数表記への変換で
const int i = 11;
const char hex = "0123456789ABCDEF"[i];
とかやらね?

やらね?あ、そ。
772デフォルトの名無しさん:2006/08/17(木) 05:51:58
ログ出力なんかで使うなぁ。
enum foo {FooNone, FooArc,, FooBox, FooChar};
なんてのがあるとして、
void outLog(enum foo bar, const char * mess)
{
fprintf(outFp, "%20s %c %s\n", timeStump(now()), "NABC"[bar], mess);
}
みたいな感じで。
まぁ、勿論範囲チェックは別途行なうわけだが。
773デフォルトの名無しさん:2006/08/17(木) 05:52:20
>>771
const char hex[] = "0123456789ABCDEF";
hex[i]
774デフォルトの名無しさん:2006/08/17(木) 08:24:47
でも、C++ではoperator []をメンバとしてしか定義できないので、
std::vectorやランダムアクセスイテレータでは、可換でないのが残念(というべきではない?)
775デフォルトの名無しさん:2006/08/17(木) 10:17:56
>>774
まっとうな姿になっただけだろう。
776デフォルトの名無しさん:2006/08/17(木) 13:30:03
ところで、boost::filesystem::path みたいなかんじで
IRI と URI を操作するために広く使えるクラスはないですか?
おながいします。
777デフォルトの名無しさん:2006/08/19(土) 05:24:17
POCO, the C++ Portable Components
http://www.appinf.com/poco/info/
これはboostと何か関係があるもの?
boost library license で提供されているし、
boost とかぶっているところもあるし。
778デフォルトの名無しさん:2006/08/19(土) 05:28:50
sourceforge にもあるみたい
http://sourceforge.net/projects/poco
779デフォルトの名無しさん:2006/08/19(土) 05:41:46
>>777
ライセンス以外関係なさそう。
APR の C++ 版ってところか。
ライセンスが boost と同じなら、いろいろ使えるかも知れんな。
780デフォルトの名無しさん:2006/08/19(土) 06:13:30
60.56.176.247
37564
朝練
781780:2006/08/19(土) 06:14:19
某ネット対戦のゲームスレに激しく誤爆
見なかったことに
782デフォルトの名無しさん:2006/08/19(土) 06:27:10
>>779 俺が作ってた(もしくは作りかけてた)
ネット周りのライブラリとかぶりまくり。
先知ってたら無駄な開発しなくて済んだのに。
まぁ趣味プログラムだからいいや・・・
783デフォルトの名無しさん:2006/08/19(土) 19:16:15
>>777
SOAっぽいことやろうと思うと、JavaかC#しか選択肢が無かったけど、このライブラリィがあれば
C++でも勝負できるね。
784デフォルトの名無しさん:2006/08/19(土) 22:42:03
>>783
このライブラリも多機能だけど、あとは
Apache Portable Runtime もそうだよな。
同じような機能があるとどれを使えばいいか迷う。
XML周りとか。でもベースになってるのは expat だね。
785デフォルトの名無しさん:2006/08/19(土) 22:47:46
APRってあれか。ACEがあるのにACEがC++だというそれだけの理由で車輪の再発明した奴か。
786デフォルトの名無しさん:2006/08/19(土) 23:04:26
>>785
そういう事情なら poco の立場はもっと酷いことになるな。
787デフォルトの名無しさん:2006/08/19(土) 23:57:29
ACEってなんだっけ?これ?
http://www.cs.wustl.edu/~schmidt/
APR って ACE と機能的にかぶってる?
788デフォルトの名無しさん:2006/08/19(土) 23:59:56
かぶってるというか、比較対象にはならん気もするが・・・
789デフォルトの名無しさん:2006/08/21(月) 14:12:46
>>743
亀だけど、確かこんな感じだったような…。当時の本人がいたら補完してホスィ。

struct DispInvoker {
 IDispatch * p;
 DISPID id;
 DispInvoker( IDispatch * p, DISPID id ) : p(p), id(id) {}
 CComVariant operator()() {
  CComVariant retval;
  ...
  pDisp->Invoke( ..., &retval, ... );
  return retval;
 }
 CComVariant operator()( CComVariant a1 ) {
  CComVariant retval;
  VARIANT args[1] = { a1 };
  pDisp->Invoke( ..., &retval, ... );
  return retval;
 }
};
struct Dispatch {
 IDispatch * p;
 DispInvoker operator->*( OLECHAR FAR * nm ) const {
  DISPID id;
  HRESULT hr = p->GetIDsOfNames(IID_NULL,&nm,1,LOCALE_SYSTEM_DEFAULT,&id);
  if( FAILED(hr) ) throw CAtlException(hr);
  return DispInvoker( p, id );
 }
};
// CComVariant name = (pDisp->*L"get_Name")();
// CComVariant result = (pDisp->*L"doSomething")(L"param");
790789:2006/08/21(月) 14:19:23
あぁ、何か微妙に間違ってる箇所が多いな。
当時、テンプレート総合スレの2でコレをみたとき、C++ スッゲと感動した記憶がある。
791デフォルトの名無しさん:2006/08/21(月) 15:03:07
>>789
オモスレー

スクリプト言語側の評価機とのインターフェースにも使えそうだ。
アリガトン

792デフォルトの名無しさん:2006/08/21(月) 20:35:35
>>791
つか、OLEオートメーション自体スクリプト言語用のインターフェースだしな。
793デフォルトの名無しさん:2006/08/25(金) 19:16:06
C# とかにある、いわゆるプロパティのような記法を
可能にするためのシンタックスシュガーを追加する
ライブラリ(?)ってないですかねぇ。
794793:2006/08/25(金) 19:35:30
む〜、こんなものを発見した。
http://www.codeproject.com/library/cpp_object_properties.asp?df=100&forumid=182321&exp=0&select=1113401
結構複雑に書いてあるなぁ。
getter と setter を自動で宣言するマクロでいいや、
なんて思ってたんだけど、テンプレートのほうが C++ ぽいよね。
795デフォルトの名無しさん:2006/08/25(金) 23:17:26
VCならdeclspecを使えば出来るよ。
796デフォルトの名無しさん:2006/08/25(金) 23:19:59
プロパティ自体もうアンチパターンだからな
797デフォルトの名無しさん:2006/08/26(土) 00:16:58
boost/test/utils/class_properties.hpp
798デフォルトの名無しさん:2006/08/26(土) 01:09:25
codeproject.comのコードは実験的なものが多いから、
boostにあるならそっちを使った方がよいと思うよ。
799793:2006/08/26(土) 08:19:49
>>797 なんでそれって boost/test/utils/ にあるんだろうね。
boost のって普通のコードで使うためのものじゃないのかも。
ふつうプロパティって言うと setter のコードの中で値の
正しさを検証して問題があれば例外投げたり、
もしくは setter に連動したコールバック関数を
定義できたりするモノだと思うんだけど、 boost のやつは
単純に読み書きのアクセス制限のためだけの機能みたいだし。

>>798 たしかに。でも codeproject のコード参考にして
自分のライブラリに取り込んだりしてるよ、結構。
ところで皆さん俺ライブラリに他人のコード参考にして
一部コピペした時って、どのように著作権表示してますか?
俺は「ここからここまでのコードはこのウェブページを参考にしました」
みたいに書いているんだけど、クラスメイトか名前空間とか
競合しないように臨機応変にいじりまくってるし、
そもそもいじってるうちに元のコードの片鱗も無くなってたりするし。

でそんな感じでぐちゃぐちゃになったコードって仕事で使って
いいものかとおもって車輪の再発明してみたり。
俺ライブラリはGPLで出せるんだけど、細かく見ていくと
「あ〜ここの数行はコピペしたんだよな、どっかから」
って感じで、ライセンスがクリアじゃないから出せない。
800デフォルトの名無しさん:2006/08/26(土) 09:29:59
>クラスメイトか名前空間とか競合しないように臨機応変にいじりまくってるし

級友を弄る>799がいるのはここですか?
801デフォルトの名無しさん:2006/08/26(土) 10:13:29
弄らないと級友と競合するからな。シンボルを巡って三角関係に。そしてリンカが止めに入って・・・


著作権表示というか、参考にしたものはコメントに書いておくよ。
ところで仕事に使ったコードを GPL で出しちゃうのか?
802793:2006/08/26(土) 10:21:42
>>801 俺ライブラリはGPLで出せる。
仕事とは関係なく書きためてきたものだから。
部分的にGPLなソフトウェアに組み込んだこともある。

で、それを使うとさらっと書ける仕事がある。
使うとGPLに感染する。
仕方ないので車輪の再発明をする。

デュアルライセンスという考え方で何とかなるのかも試練が、
そもそもデュアルライセンスという考え方が理解できない。
803デフォルトの名無しさん:2006/08/26(土) 10:26:11
自分が著作権を持ってるコードなら、ライセンスがなんだろうと
利用が制限されることはないだろ。
GPLの基で公開しておいて、自分はクローズドに使うというのは
なんの問題もない。
804デフォルトの名無しさん:2006/08/26(土) 10:50:40
そういえばNPLではNetscape社は独占的な利用ができたな。
そんな感じでNPLのNetscapeだけ自分に書き換えたOrePLでも作って
OrePL/GPLのデュアルライセンスにするとか。
805793:2006/08/26(土) 11:22:00
>>803 そうなんだよな。最初は。
で、GPLで公開するとパッチや改善のためのコードが
送られてきて、それをマージするともはや自分だけのモノじゃなくなる。
新しいバージョンのコードはクローズドでは使えない。
806デフォルトの名無しさん:2006/08/26(土) 14:49:13
>>805
GPLはウィルスより悪質だとか言われる所以ですなw
807デフォルトの名無しさん:2006/08/26(土) 15:48:54
このスレ的には Boost ライセンスじゃないのか
808793:2006/08/26(土) 16:13:03
>>807 うむ。そうすると、Boost ライセンスで公開すればいいのかな。
あ〜でもただ乗りすんな、っていう心の狭い俺には Boost ライセンスは
おおらかすぎるなぁ。
809デフォルトの名無しさん:2006/08/26(土) 16:14:34
心が狭いのに公開したいの?w
810デフォルトの名無しさん:2006/08/26(土) 16:20:21
>>793
はいはい、後は自分の日記にでも書いてね。
お前の糞ライブラリのライセンスなんてどうでもいいから。
811デフォルトの名無しさん:2006/08/26(土) 20:21:37
>>810
予想を裏切らないな、お前
こういうこという椰子が出てくるなと思っていたところだ
812デフォルトの名無しさん:2006/08/26(土) 20:30:28
後付の言い訳乙
813デフォルトの名無しさん:2006/08/26(土) 20:32:00
まぁ何も作れない奴はすぐ妬むから。
814デフォルトの名無しさん:2006/08/26(土) 21:13:21
俺はむしろプロパティより
pimplイディオムを使用した時にグルーコードを
いちいち書かなくて済むライブラリもしくはテクが知りたい
815デフォルトの名無しさん:2006/08/26(土) 21:19:16
>>811
椰子とか使ってんの?
いつの時代の2チャンネラだよ。古っ
816デフォルトの名無しさん:2006/08/26(土) 21:49:27
>>814
全部仮想関数にして継承する方法もあるよ。
インスタンスは new で作ることになるけどね。
パフォーマンス的にあんまり変わらなくて、ちょっとだけ楽だから、
new に抵抗が無い環境で最初から書くなら pimpl よりこっちがお勧め。
817デフォルトの名無しさん:2006/08/26(土) 22:45:46
>>816
何言ってるんだ?
818デフォルトの名無しさん:2006/08/26(土) 22:51:33
pimplイディオム使ってる時点でnew必須だろ
819デフォルトの名無しさん:2006/08/26(土) 22:53:43
>>818
あー、そうだった。
じゃ継承する方法のデメリットはほとんど無いね。
やっぱりお勧め。
820デフォルトの名無しさん:2006/08/26(土) 22:58:28
>>819
何言ってんだ。
pimplイディオム知ってるのか?
821デフォルトの名無しさん:2006/08/26(土) 23:00:59
>>819
お前自分がpimplイディオムもちゃんと分かってない馬鹿と露呈したんだから
ちょっとは勉強してこいよ。

そんなんじゃこの先、ずっと恥の上塗りの連続だぞ?
822デフォルトの名無しさん:2006/08/26(土) 23:05:19
ニキビだと思ったんだろ
823デフォルトの名無しさん:2006/08/26(土) 23:16:19
>>820-821
pimpl と、継承を使う方法は、実装を隠すという同じ目的のための
2つの手法だよ。継承を使うほうには pimpl みたいに名前が付いてないから
マイナーなだけ。

// Foo.hpp
class Foo {
public:
  friend Foo* new_Foo();
  virtual void f() = 0;
private:
  class Impl;
};
Foo* new_Foo();

// Foo.cpp
class Foo::Impl : public Foo
{
  // ここに実装用メンバ
public:
  void f() { /* ここに関数の実装 */ }
};
Foo* new_Foo() { return new Foo::Impl(); }
824デフォルトの名無しさん:2006/08/26(土) 23:28:48
>>823
何がおかしいのかわかってないらしい。
825823:2006/08/26(土) 23:30:56
>>824
ごめん。わかんねーや。何がおかしいの?

>>814 が言うようなグルーコードが無いから
こっちの方法がお勧めできると思ったんだけどね。
826デフォルトの名無しさん:2006/08/26(土) 23:38:40
>>825
STLのコンテナに入れることが出来ない。
827デフォルトの名無しさん:2006/08/26(土) 23:41:10
>>826
ポインタ入れるに決まってるだろ。
828デフォルトの名無しさん:2006/08/26(土) 23:45:39
なんだかよくわからんが、そもそも>>818は、おかしくないか?
それと、実装の隠蔽については、boostのドキュメントにあったぞ。どこかは忘れたが。
829デフォルトの名無しさん:2006/08/26(土) 23:48:27
>>823
名前が付いてないって...どうみてもそれclass side factoryじゃん。
有名どころなんだから名前ぐらい知っておこうよ。
830デフォルトの名無しさん:2006/08/26(土) 23:53:35
>>825
class Fooを派生するときに困る。
831デフォルトの名無しさん:2006/08/26(土) 23:57:01
>>829
実装を隠す方法の一部に class side factory パターンを使っているだけ。
実装を隠す方法に class side factory と名前が付いているわけじゃない。
832デフォルトの名無しさん:2006/08/26(土) 23:58:18
>>830
実装継承するつもりが無いんで、あまり問題にならない。
むしろ実装継承を排除できる。
833デフォルトの名無しさん:2006/08/27(日) 00:02:44
>>832
いや、お前が困るかどうかの話なんかしてないし。
834デフォルトの名無しさん:2006/08/27(日) 00:17:06
まぁ将来変な制限の為に困らないためにも、実装を隠したい場合はpimplの方がお勧めだね。
グルーコードはコピペでw
835デフォルトの名無しさん:2006/08/27(日) 02:06:16
>>814
思いっきしなぶりっ子
だ が そ れ が い い 。

>>815
ばーか
死ね
836デフォルトの名無しさん:2006/08/27(日) 04:42:15
boost::shared_ptr のインスタンスを XML にシリアライズしようとすると
なぜか boost::scoped_ptr<std::locale> のコピーコンストラクタを
呼び出そうとして、そりゃ private だぉ (non-copyableになってる)
って怒られるんですが・・・なんででしょうか?
837836 :2006/08/27(日) 10:07:01
ごめん、
template<class Archive>
serialize(Archive ar, const unsigned version);
って宣言してた・・・・
Archive を参照でうけてなかったんで、コピーが発生してました。
しかしテンプレートがらみでエラーが出ると、原因を追っかけるのが
大変ですね。結局エラーが再現する最小のコードにまで削って、
ようやく気がつきました。

秋の気配を感じる心地よい週末、これでようやく持ち帰りの
コードを書き上げられそうです orz
838デフォルトの名無しさん:2006/08/27(日) 10:09:22
>>837
そんな貴方に
つ[STLFilt]
http://www.bdsoft.com/tools/stlfilt.html

なかなかいいですよこれ。
839デフォルトの名無しさん:2006/08/27(日) 10:16:02
ああ、言い忘れてた。こいつにはPerlが必要です。
WindowsならActivePerlがいいですね。
http://www.activestate.com/
840デフォルトの名無しさん:2006/08/27(日) 14:49:39
>>837
エラーを特定するのが、えらい大変だっちゅうことだな
841デフォルトの名無しさん:2006/08/27(日) 15:51:10
>>835
オールドタイプは去れ
842デフォルトの名無しさん:2006/08/27(日) 18:21:27
誤爆だろw
843デフォルトの名無しさん:2006/08/27(日) 18:24:55
>>841
アニヲタ乙
臭いから死んでね
844デフォルトの名無しさん:2006/08/27(日) 18:38:15
>>843
アニオタがアニオタと非難するのかw
最高の馬鹿きたw
845デフォルトの名無しさん:2006/08/27(日) 18:42:09
>>843
オールドタイプってそういう意味だったのか。
勉強になった。ありがとう臭いアニオタ。
846デフォルトの名無しさん:2006/08/27(日) 19:18:33
職場にいるアニヲタがよく使ってるからな
意味はよく知らんけど
847デフォルトの名無しさん:2006/08/27(日) 19:26:11
>>844
自分がアニオタだって認めちゃってるしw
848デフォルトの名無しさん:2006/08/27(日) 19:41:20
ニュートラルと遺伝子操作したデザイナーズじゃねえの?
849デフォルトの名無しさん:2006/08/27(日) 19:50:12
>>841->>848
スレ違い
850デフォルトの名無しさん:2006/08/27(日) 19:50:16
おまいらはコーディネーターじゃなくてコーダー
851デフォルトの名無しさん:2006/08/27(日) 22:10:29
Are you high level booster!!!
852デフォルトの名無しさん:2006/08/27(日) 22:54:57
>>850
コーディネータってこれ?
http://www.itc.or.jp/index.html
853デフォルトの名無しさん:2006/08/27(日) 22:59:36
>>852
ここ何のスレだと思ってるんだ
ガンダムの話に決まってるだろう
854デフォルトの名無しさん:2006/08/27(日) 23:05:26
Spiral Boost とか Super Aero Boost についてはこのスレで大丈夫ですか?
855デフォルトの名無しさん:2006/08/28(月) 00:18:19
このまま連合vsザフトの話へ流れるのは避けたい
856デフォルトの名無しさん:2006/08/28(月) 05:28:26
名前が出たらNGぃ〜
857デフォルトの名無しさん:2006/08/28(月) 15:01:00
うにゅーうめぇwwwwwwww
858デフォルトの名無しさん:2006/08/28(月) 18:34:39
正規表現スレと迷ったけどこちらへ。

w2kで
boost::regex re("本");
てするとboost::bad_expression例外が発生するんですけど何が原因でしょう。
SJISだから?
859デフォルトの名無しさん:2006/08/28(月) 20:10:53
wregex
860デフォルトの名無しさん:2006/08/28(月) 22:25:15
>>853
ガンダムで盛り上がっちゃうことがこのスレの限界かもね
でも、それはそれで息抜きも必要ってことで...
ガンダムネタだけど、
seedのOSを書き換えてるシーンは、
どう見てもパラメータを変えてるだけにしか見えないよお
861デフォルトの名無しさん:2006/08/28(月) 22:47:41
>>860
著作権なさそうだな
862デフォルトの名無しさん:2006/08/28(月) 23:18:43
>>860
よく映画とかの不正アクセスとかのシーン
キーボ連打であと10秒 ヽ(`Д´)ノ とかありえなす
863デフォルトの名無しさん:2006/08/28(月) 23:18:48
>>860
バイファムはz80で
864デフォルトの名無しさん:2006/08/29(火) 13:14:01
FAT32のパーティションにインスコするんじゃなかったorz
865デフォルトの名無しさん:2006/08/30(水) 01:23:28
キーボードを早撃ちしてると、仕事が凄く出来ると思われる気がする
パフォーマンスに過ぎないんだが...
866デフォルトの名無しさん:2006/08/31(木) 03:02:42
一項関数を引数に取る関数、例えば微分を行う関数を無名で作ることってできないんでしょうか?

const double dx = 0.0000001;

boost::function<double (double)> deriv(boost::function<double (double)> func){
  return ((bind(func, (_1 + dx)) - bind(func, _1)) / dx);
}

これを

int main(){
  const double dx = 0.0000001;

  boost::function<boost::function<double (double)> (boost::function<double (double)>)> deriv
    = ...
}

こんな感じにしたいのですが。
867デフォルトの名無しさん:2006/08/31(木) 03:16:19
boost::lambda でできるのでは?
868デフォルトの名無しさん:2006/08/31(木) 03:40:01
lispだと

(lambda (g)
 (lambda (x)
  (/ (- (g (+ x dx)) (g x) dx)))

という風に書けるんですけど、boost::lambdaはλ式の入れ子構造が使えるのかわからないんです。
869デフォルトの名無しさん:2006/09/05(火) 05:32:16
class Hoge
{
typedef shared_ptr<Hoge> HogePtr;
typedef std::list<HogePtr> Container;

このときにfor_each使うときってどうするんですか?
870デフォルトの名無しさん:2006/09/05(火) 05:32:54
うお、書いてる途中で書き込んでしまった。
class Hoge { void Func(); };
こんな感じです
871デフォルトの名無しさん:2006/09/05(火) 07:04:05
>>869
何か問題でも?
872デフォルトの名無しさん:2006/09/05(火) 07:12:40
>>871
mem_fun使ったら怒られてしまったので。
873デフォルトの名無しさん:2006/09/05(火) 07:18:13
>>872
じゃぁそのソース(と、できればエラーメッセージも)貼ってもらわないとわからん。
874デフォルトの名無しさん:2006/09/05(火) 07:27:27
情報の小出しになってしまってすいません。

class Hoge
{
public:
void Func();
};

typedef shared_ptr<Hoge> HogePtr;
typedef std::list<HogePtr> Container;

Container g_container;

void CallFunc()
{
std::for_each( g_container.begin(), g_container.end(), mem_fun(&Hoge::Func) );
}

で、エラーメッセージはこうです。
>error C2664: 'void boost::mem_fun_t<S,T>::operator ()(T *) const' :
>1 番目の引数を 'boost::shared_ptr<T>' から 'Hoge *' に変換できません。

もちろんですが、std::list<Hoge*>なら上手くいきます。
と、書きながら気づいたのですが、
全メンバに対してmem_funでgetして更にHoge::Funcを呼び出すようにすればいいのかな?
875デフォルトの名無しさん:2006/09/05(火) 07:34:04
>>874
あー std::mem_fun はスマートポインタへのサポート無いから、駄目だね。
boost::mem_fn で置き換えるとそのままいけるよ。
ほかにも boost::bind でも boost::lamnda::bind でもいける。
876デフォルトの名無しさん:2006/09/05(火) 07:40:46
>>875
ほんとうだ。mem_fnにしたら行けました。ありがとうございます。
877デフォルトの名無しさん:2006/09/06(水) 08:48:30
boost::ptr_vector って、
シリアライザ用意されてないんだね。
878デフォルトの名無しさん:2006/09/06(水) 09:45:07
やられた。<boost/cstdint.hpp>には、(u)intptr_tがないなんて。
879877:2006/09/06(水) 13:07:59
1.34 では Pointer Container のシリアライザも用意されるみたいだね
http://boost.cvs.sourceforge.net/boost/boost/boost/ptr_container/ptr_vector.hpp?view=log

ところで 1.34 の目玉ってなに?
880デフォルトの名無しさん:2006/09/06(水) 13:15:20
881877:2006/09/06(水) 13:34:34
>>880 半月くらい前に教えて星方
882デフォルトの名無しさん:2006/09/06(水) 18:32:44
ようやく 1.34 で Xpressive くるか!
883デフォルトの名無しさん:2006/09/06(水) 18:52:14
正規表現ライブラリが
何種類も用意されるんだな。
884デフォルトの名無しさん:2006/09/06(水) 19:57:06
filesystem::path が、filesystem::basic_path になるのは地味に嬉しい。
885デフォルトの名無しさん:2006/09/06(水) 22:13:33
>>884 どう違うの?
886デフォルトの名無しさん:2006/09/06(水) 22:15:01
もうC++とBoost無しでは生きていけなくなりそうだ
887デフォルトの名無しさん:2006/09/06(水) 22:46:42
>>886
じゃあ、Boostと結婚しろ
888デフォルトの名無しさん:2006/09/06(水) 22:53:21
C++とBoostと結婚したら重婚になってしまいます
889デフォルトの名無しさん:2006/09/06(水) 23:03:13
C++やBoostに戸籍なんてないから事実婚でOK
890デフォルトの名無しさん:2006/09/06(水) 23:08:57
>>884-885
Unicodeでパス名が扱えるようになるってことかな?
891デフォルトの名無しさん:2006/09/06(水) 23:20:14
>>890
そうか、今までunicodeは使えなかったのか。
個人的にはURLも統一的に扱えると便利なんだが。
892デフォルトの名無しさん:2006/09/06(水) 23:29:34
>>888
男の子を産めよ
893デフォルトの名無しさん:2006/09/07(木) 06:33:17
Program Options を使っておられる方に質問です。
たとえばコマンドラインでデバッグレベルを設定するのに、

optionsDescriptionOfCommandLine.add_options()
("debug-level", value<unsigned>
(&generalOptions.debug_level)->
default_value(0), "debug level");

のようにすれば、

store(command_line_parser(argc, argv).
options(optionsDescriptionOfCommandLine).run(), variablesMap);
notify(variablesMap);

としてコマンドラインの解析が終了するとともに
generalOptions.debug_level に値が格納されます。
とすれば variablesMap からその後改めて

generalOptions.debug_level =
variablesMap["debug-level"].as<unsigned>()

のように値を取り出すことができる意味はあるのでしょうか?
variables_map に as メソッドが用意されている理由が分かりません。
また notify メソッドは何のために必要なのでしょうか?
894893:2006/09/07(木) 10:11:05
パラメータの正当性を自分でチェックするための
コードがコールバック(?)されるようにするためのものみたいですね。
あと、さっき気づいたんですが、あらかじめ用意されている
基本型や std::string など以外の型でも、

1)デフォルトコンストラクタが用意されている
2)代入演算子が用意されている
3)std::istream& operator>> が用意されている
4)std::ostream& operator<< が用意されている

この条件さえ満たせばオプションの型として使えるみたいですね。
895デフォルトの名無しさん:2006/09/07(木) 10:11:52
basic_path ってことは basic じゃないすごい
なにかとてつもないクラスが用意されているんだな!
896デフォルトの名無しさん:2006/09/07(木) 16:28:03
namespace boost
{
 namespace BOOST_FILESYSTEM_NAMESPACE
 {
  template<class String, class Traits> class basic_path;

  struct path_traits;
  typedef basic_path< std::string, path_traits > path;

  struct path_traits
  {
   typedef std::string internal_string_type;
   typedef std::string external_string_type;
   static external_string_type to_external( const path &,
   const internal_string_type & src ) { return src; }
   static internal_string_type to_internal(
   const external_string_type & src ) { return src; }
  };

# ifndef BOOST_FILESYSTEM_NARROW_ONLY
  struct wpath_traits;
  typedef basic_path< std::wstring, wpath_traits > wpath;


うれしいね〜
897デフォルトの名無しさん:2006/09/10(日) 08:02:40
std::auto_ptr って boost::scoped_ptr に代入できるんだな。
std::auto_ptr でさんざんこねくり回してから
最終的な保持場所に boost::scoped_ptr に代入すればいいのか。
こねくり回すときには今まで boost::shaed_ptr を使ってた。
898デフォルトの名無しさん:2006/09/10(日) 14:13:22
>>897
書き手の日常が臭ってくる卑猥な文章だったんで少し脚色してみた。

チンポ って マンコ に挿入できるんだな。
指 でさんざんこねくり回してから
最終的な保持場所に チンポ を挿入すればいいのか。
こねくり回すときには今まで バイブレータ を使ってた。
899デフォルトの名無しさん:2006/09/10(日) 14:14:42
>>898
卑猥なのはおまえだ
900デフォルトの名無しさん:2006/09/10(日) 14:25:40
>>899 卑猥じゃなくて、比喩。
901デフォルトの名無しさん:2006/09/10(日) 14:27:17
>>900
卑猥な比喩だろ
902デフォルトの名無しさん:2006/09/10(日) 14:29:10
妄想癖があることだけは解った
903デフォルトの名無しさん:2006/09/10(日) 14:41:15
楽しそうだな、おまえら。
904デフォルトの名無しさん:2006/09/10(日) 16:16:55
>897 は、自分が発してる卑猥さに気付いて無いんだね
905デフォルトの名無しさん:2006/09/10(日) 19:38:22
>>897
知識披露厨ってやつか。 C++ 相談室にも居なかったか?
独り言はチラシの裏にでも書いとけ。

と思ったけど、このスレをさっさと落とすのには役立つから、ここでなら別にいいや。
906デフォルトの名無しさん:2006/09/10(日) 20:59:16
>>897
まぁおまえのような奴はどこのスレッドに行っても
うざがれるだけだろうけどな。
俺はBoost厨の集まるゴミスレがさっさと落ちてくれればそれでいい。
死ねよ。
907デフォルトの名無しさん:2006/09/10(日) 23:31:51
変なのが粘着しちゃったな
908デフォルトの名無しさん:2006/09/11(月) 00:24:27
>>898が知識披露厨ってことは分かった。
909デフォルトの名無しさん:2006/09/11(月) 00:34:31
>>897
知識披露厨、発見!
だから何?
910デフォルトの名無しさん:2006/09/11(月) 00:35:34
>>908
他人に八つ当たりは見苦しいよ
911デフォルトの名無しさん:2006/09/11(月) 06:28:54
まぁ、発見がたくさんある人生は楽しそうで羨ましいかなw<ってことは分かった
912デフォルトの名無しさん:2006/09/11(月) 11:31:15
もうこのスレは終わりでいいだろ
C++のスレをいくつもたてんなよ。
913デフォルトの名無しさん:2006/09/11(月) 11:32:59
ここはboost馬鹿の隔離スレなので必要。
914デフォルトの名無しさん:2006/09/11(月) 12:58:31
まだ終わらんよ
915デフォルトの名無しさん:2006/09/12(火) 00:42:34
Boostは、C++皇位継承権第一位の皇太子だかんな
916デフォルトの名無しさん:2006/09/12(火) 15:27:40
Boost.Serialization
先にarchive関係のヘッダインクルードしてなかったせいで
奇妙なエラーが出て悩んだ...orz



917デフォルトの名無しさん:2006/09/12(火) 16:28:01
>>916 うむ、そうだよな。俺も悩んだ。
boost/archive/xml_iarchive.hpp とかを
先にインクルードしておかなきゃ駄目なんだよな。
ホントは順序依存性があるのは良くないことなんだがな。
あるならあるで #error とか使って止めてくれって思うよ。
918デフォルトの名無しさん:2006/09/12(火) 16:47:05
何をシリアライズしたいか、プログラマ以外には分からない。
919デフォルトの名無しさん:2006/09/12(火) 17:38:41
>>918
どんな順でヘッダふぃあるをインクルードしようが
テンプレートが特殊化される時点では boost::serialization::*
も boost::archive::* も読み込まれているので、問題ないはず、
まぁそれは理想で現実はインクルード順が違うとエラーになるんだが。

何が困るかって言うと、もし自分が使用したいライブラリの中で
さらにインクルードが行われていると、制御するすべがない
場合もある、ということだな。

とはいえ、今のところサードパーティのライブラリが boost
依存なんて聞いたことがないので、自分でインクルード順に
気をつけていればいいだけなんだが。
920デフォルトの名無しさん:2006/09/13(水) 15:44:08
boost::serialization::make_nvp

ワイド文字や実体参照には対応してないのでしょうか?
921デフォルトの名無しさん:2006/09/13(水) 15:54:25
>>920 それは、XML のタグ名としてワイド文字を使いたいと言うことですか?
922920:2006/09/13(水) 16:28:13
>>921
ワイドで統一してる場合、そこだけchar*になるのも嫌だなと思ったので。

NVPはタグになるから実体参照関係ないですね...

だから、型名を直接埋め込むわけにはいかないのか。
.NETでも
hoge<int,int> -> hogeOfInt32Int32
とかに変換されてるぽいし。
923デフォルトの名無しさん:2006/09/13(水) 17:11:33
>>922
make_nvp のソースを見てみれば分かると思うけど、
タグ名への変換は単純にプリプロセッサの文字列化演算子を
使っているだけなので、ワイド文字は想定されていないみたい。

ところで、俺は普通直接 make_nvp を呼び出さずに
BOOST_SERIALIZATION_NVP(aiueo) みたいに呼び出して
タグ名は aiueo で値は変数 aiueo なので、
変数名 = 要素名 なんだけど、わざわざ要素名にワイド
文字を使いたいってことあるのかな?
924デフォルトの名無しさん:2006/09/13(水) 22:43:06
>>923
よくレス読めよ
925デフォルトの名無しさん:2006/09/16(土) 01:18:37
Boost初心者です。
いちいちVisual Studioのディレクトリにインストールするとめんどくさいので、
プロジェクトの中にProjectA/inc/boost/とか作って、その中に使いたいヘッダを
どかっと入れようと思うのですが。
boost/config.hとか
boost/config/以下のヘッダ群が気になります。あれも入れた方が良いんでしょうか。
あれらって、インストール時に自動的に生成されたヘッダだったりするんでしょうか。
それともどの環境向けのboostでも同じコードなんですか?

プロジェクトをいずれ色んなコンパイラでビルドできるようにしたいので、boostで必要な
ヘッダを入れて、どの環境のコンパイラでもそのままビルドできるようにできるといいのですが。
926デフォルトの名無しさん:2006/09/16(土) 01:41:57
>boost/config.hとか
>boost/config/以下のヘッダ群が気になります。あれも入れた方が良いんでしょうか。
たいていの場合他のヘッダが依存しているので入れないと機能しないはずです.

>あれらって、インストール時に自動的に生成されたヘッダだったりするんでしょうか。
多分no.$(BOOST_ROOT)/boost以下は全てパッケージの段階で存在するファイルのはずです.

>それともどの環境向けのboostでも同じコードなんですか?
ヘッダに関してのみなら多分yes.
単に#ifdefで切り分けていたりとかそういうコードで占められているはずです.

>プロジェクトの中にProjectA/inc/boost/とか作って、その中に使いたいヘッダを
>どかっと入れようと思うのですが。
bcpを使って依存しているファイルのみを自動でパッケージから抜き出せるのでご参考までに.
http://www.boost.org/tools/bcp/bcp.html
927デフォルトの名無しさん:2006/09/16(土) 04:54:08
>いちいちVisual Studioのディレクトリにインストールするとめんどくさいので

Boost インストールする場所なんてどこでもいいと思うんだが。
ちなみに俺は各マシンでビルドするのが面倒くさいので、
ビルドしたバイナリをインストーラ付きのパッケージにしている。
で、パッケージのインストール先は C:\Program Files\boost だ。
いや、まぁそんな空白入りのディレクトリに入れるなとか言う批判も
わかるが、VC++ ならそんなディレクトリでもインクルードパスに
追加できるし、無問題。

ホントは Windows も UNIX 系のディレクトリコンベンションに
従っててくれればよかったんだけどね。 C:\usr\local\include とかさ
928デフォルトの名無しさん:2006/09/16(土) 09:31:03
聞いてもいないことをペラペラペラペラと・・・

パスに空白があることより、お前の頭に空白があることが問題だ
929デフォルトの名無しさん:2006/09/16(土) 09:39:30
>>928
いちいちそんなことで絡むなよ
カルシウム取れ(´ー`)ノ⌒θ
930デフォルトの名無しさん:2006/09/16(土) 13:19:24
>>926
おお、ありがとうございます。
bcpなんてのがあったんですね。

>>927
そういうやり方もありますか。環境をWinだけに限ればそのやり方もありかもしれませんね。

しかし、config.hとか見てみると#defineで処理分けていますが、あそこらへん、ユーザーがマクロ名の定義とかする必要があるシチュってあるんでしょうか。
931デフォルトの名無しさん:2006/09/16(土) 13:21:31
>>928
それ、誰かに聞かれたの?
聞かれていないならペラペラと無駄なこと書かないように :-)
932デフォルトの名無しさん:2006/09/16(土) 13:51:40
>>931
それ、誰かに聞かれたの?
聞かれていないならペラペラと無駄なこと書かないように :-)
933デフォルトの名無しさん:2006/09/16(土) 13:54:14
恐怖の無限ループキターーーー!
934デフォルトの名無しさん:2006/09/16(土) 13:57:11
>>933 循環参照ともいう。
いわねぇか。
935デフォルトの名無しさん:2006/09/16(土) 14:04:28
>>933
まぁ実際にはループになってないけどねw
聞かれていないなら言うな、と主張してるのは片方だけだからw
936デフォルトの名無しさん:2006/09/16(土) 14:31:18
>聞かれていないなら言うな、と主張してる

誰がどのレスで?
937デフォルトの名無しさん:2006/09/16(土) 16:09:35
ねばるねばるw
938デフォルトの名無しさん:2006/09/16(土) 16:55:52
外したこと書いたって思った時点で粘着やめて頭冷やしてくれ。
できればURLも暫く忘れて来ない方がいい。
939デフォルトの名無しさん:2006/09/16(土) 17:11:10
じゃあお前は来ない方がいいね
940デフォルトの名無しさん:2006/09/16(土) 17:47:14
まぁみんなでカルシウム摂るということで
941デフォルトの名無しさん:2006/09/16(土) 18:43:58
最近「カルシウム」という単語をよく見る気がする。
942デフォルトの名無しさん:2006/09/16(土) 18:53:43
カルシウムにはVDも必要だぞ!
943デフォルトの名無しさん:2006/09/16(土) 19:42:28
bcpってソースコードでしか配布されてみたいですね。
boost/tools/
以下のツールプログラムの一括コンパイルのやり方がよく分かりません。
bjamを使うらしいことは分かるのですが・・・。
944デフォルトの名無しさん:2006/09/16(土) 22:04:47
>>943
一括コンパイルはわからんけど、bcpだけならtools/bcp/でbjam実行すれば
bin/boost/tools/bcp/あたりに実行ファイルできるんじゃない?
945デフォルトの名無しさん:2006/09/17(日) 05:00:24
>>944
アドバイスありがとうございます。でもbjamってmakeと違って良く分からなくて、
どんな引数を与えればよいのか・・・。
946デフォルトの名無しさん:2006/09/17(日) 07:39:43
本家のgetting startedか↓見ればいいんでない
ttp://www.kmonos.net/alang/boost/build.html
947デフォルトの名無しさん:2006/09/17(日) 09:39:20
>>945
bcpならとりあえず-sTOOLS=(ビルドツール名)だけつけとけばいけるよ
948デフォルトの名無しさん:2006/09/17(日) 11:49:35
>>946
>>947
ありがとうございます。できました!
最初Cygwinでやってたら失敗して、コマンドプロンプトで成功しました。
しかし、bcp shared_ptr fooとかやってもかなりの量コピーされるなぁ・・・。
949デフォルトの名無しさん:2006/09/19(火) 16:59:36
shared_ptrのなかにthisを入れてreturnしたりするのってよくない?
950949:2006/09/19(火) 17:30:07
このようなコードなのですが、shared_ptrを使うと、main()のスコープから外れる前に
deleteされてしまって、セグメンテーションフォールトが起きます。
どこがおかしいのでしょうか。

#include <iostream>
#include <boost/shared_ptr.hpp>
struct A;
typedef boost::shared_ptr<A> APTR;
//typedef A* APTR;
void print(APTR);
struct A{
virtual const char *name(){return "A";}
virtual APTR getPointer(){return APTR(this);}
virtual void p(){print(APTR(this));}
virtual ~A(){std::cout << "~A" << std::endl;}
};
struct B : public A{
virtual const char *name(){return "B";}
virtual ~B(){std::cout << "~B" << std::endl;}
};
void print(APTR a){
std::cout << "print: " << a->name() << std::endl;
}
int main(){
APTR b(new B);
print(b->getPointer());
b->p();
}
951デフォルトの名無しさん:2006/09/19(火) 17:32:53
getPointer()が返る時にはdeleteされてるんで当然だろ
952デフォルトの名無しさん:2006/09/19(火) 17:46:30
BとDを使え
953デフォルトの名無しさん:2006/09/19(火) 17:53:22
端的に言うとshared_ptrの使い方根本的に間違ってる。
954デフォルトの名無しさん:2006/09/19(火) 18:18:35
enable_shared_from_thisかな?
955デフォルトの名無しさん:2006/09/19(火) 18:45:34
>954
950じゃ無いがそんなのあったんだな
俺はweak_ptr持たせてその都度lock()してたよ
956デフォルトの名無しさん:2006/09/19(火) 21:06:39
Boost C++ Library プログラミング 購入。
これで俺もBoost馬鹿に。
957デフォルトの名無しさん:2006/09/19(火) 21:11:11
ドキュメント読もうとしない時点でただの馬鹿
958デフォルトの名無しさん:2006/09/20(水) 01:27:01
文字化けしてますよ。
959デフォルトの名無しさん:2006/09/20(水) 02:34:34
文字化けしてませんよ。
960949:2006/09/20(水) 06:59:06
使い方が間違っているから、先にdeleteされてしまうんだとは思いますが、
shared_ptrの用途は合っていますか?
生ポインタと同じように使って、いろいろなスコープにコピーされるけど、
最後のポインタがなくなるときに、生ポインタも解放される、
という使い方をしたいのですが。
virtualなメンバ関数は継承元ポインタで呼び出したときでも、継承先のメンバ関数が
呼ばれる、という普通のポインタのような継承もしたいのですが。
961デフォルトの名無しさん:2006/09/20(水) 12:07:38
>>960
用途はそれで合ってると言える。 "shared" だからね。
継承したときの動作も普通のポインタと同じ。
962デフォルトの名無しさん:2006/09/20(水) 12:21:14
>>960
そういう用途なら、IUnknown みたいな参照カウント管理を行うための
クラスを用意しておいて、intrusive_ptr でラップしたほうがいいような気がする。
963デフォルトの名無しさん:2006/09/20(水) 12:32:38
>>962
それは効率が問題になってからでいいんじゃないの?
964デフォルトの名無しさん:2006/09/20(水) 13:02:27
いや、クラス側が自分へのポインタをスマートポインタで返したいって話なら、
侵入型スマートポインタが一番自然な解だと思うが。
965デフォルトの名無しさん:2006/09/21(木) 08:09:40
>>964
boost::shared_ptr とかの
普通のスマートポインタじゃなくて?
966デフォルトの名無しさん:2006/09/21(木) 08:41:21
侵入型も普通のスマートポインタだと思うがw
967デフォルトの名無しさん:2006/09/21(木) 15:16:15
boost::filesystem:wpath が使えるようになるのは、
次のバージョンからでしょうか?
968デフォルトの名無しさん:2006/09/21(木) 15:52:48
>>967
yes。
ただし、CVSから、最新版落としてくれば今からでも使える
969デフォルトの名無しさん:2006/09/21(木) 19:23:17
デフォルト引数を使った関数でboost.bindするときは注意が必要なんだな。
あのエラーメッセージじゃデフォルト引数の問題と気づくのは至難の業だ。
970デフォルトの名無しさん:2006/09/21(木) 20:12:41
>>967
boost::filesystem::path の wchar_t バージョン?
971デフォルトの名無しさん:2006/09/21(木) 20:33:11
>>970
そのとおり。basic_stringみたいにbasic_pathというクラステンプレートが作られた。
972デフォルトの名無しさん:2006/09/21(木) 20:55:56
Windows な人が今のバージョンの boost::filesystem:: で
ディレクトリ一覧を取得したりして、日本語ファイル名が
含まれていると、今は std::string なのに UTF-8 が
入って返ってきたりするのか。
973デフォルトの名無しさん:2006/09/21(木) 21:52:35
UTFじゃなくてOS依存でUCS2かUCS4になるはず。
たぶんWin32だとUCS2で入ってくる。
974デフォルトの名無しさん:2006/09/21(木) 21:54:48
吐き気がした
975デフォルトの名無しさん:2006/09/22(金) 12:29:24
>>973
Win32 API が MBCS なり UTF-16 なりで返してくるファイル名を(どうやってか)UCS2に
変換して、それを std::string に入れるの?! そりゃ酷い実装だな・・・
976デフォルトの名無しさん:2006/09/22(金) 12:47:56
普通UCS-2やUCS-4はwstringのはずだよな。
977デフォルトの名無しさん:2006/09/22(金) 12:51:50
今のboost::filesystemは、APIが返すバイト列をそのまま使ってるだけじゃないのか?
FindNextFileAとか直に書かれてるし。
978デフォルトの名無しさん:2006/09/22(金) 15:39:20
>>973
いや、wstringはUTFを扱えないからUCSで処理するだろう。
<演算子とか使えなくなって大改造が必要になる。

だから変換時にUCSの範囲を超えたら例外を投げるか
あるいはそこでの動作保証をしないかのどちらかだろ。
979デフォルトの名無しさん:2006/09/22(金) 16:21:46
wchar が UCS2 か UCS4 かってどこかで決められてるの?
Windowsでのワイド文字はどっち?
980デフォルトの名無しさん:2006/09/22(金) 16:38:48
wchar_tが具体的に何bitかはコンパイラの勝手。VC++@Win32だと16bitでgcc@Linuxだと普通32bitだったと思うが。
wchar_tにどのエンコードで入ってるかはライブラリやユーザーの勝手。

OSレベルの話ならWindwos2000あたりまではUCS-2、XP以降でUTF-16になったと思うが、
Windowsのどのバージョンが具体的にUnicodeのどのバージョンをサポートしてるかはしらん。
981デフォルトの名無しさん:2006/09/22(金) 17:05:34
>>980 そうか、Windows のAPIでUnicode版ってのが UCS2 じゃなくて UTFー16 になったのは
最近のことだったのか。UCS2 の範囲を超えたら例外って意味が分からなかったんだよ。
そうすると boost::filesystem はかなり無茶しているなぁ。
Windows API とのやりとりなんてバイト列そのまま受け渡しだから。
982デフォルトの名無しさん:2006/09/22(金) 18:24:59
OSの話だけじゃなくてsortとかiteratorの問題もあるから
どうしても文字セットを広げたければUCS4でやるべきなんだな。
983デフォルトの名無しさん:2006/09/22(金) 18:34:09
結局、Visual C++ のコンパイラと付属ライブラリが
wchar_t を16ビットで扱うのが悪いということか。
ところで wchar_t って組み込み型?それとも typedef 型?
984デフォルトの名無しさん:2006/09/22(金) 18:34:20
つーか文字列のiteratorはrandom accessにすべきじゃなかったんだ。
今更言ってもどうしようもないが。
985デフォルトの名無しさん:2006/09/22(金) 18:38:38
>>983
C++の規格では組み込み型。VC++はコンパイルオプションでどちらにもできたと思う。
986デフォルトの名無しさん:2006/09/23(土) 00:56:38
>>984
random accessできない文字列のiteratorって何に使うの?
987デフォルトの名無しさん:2006/09/23(土) 01:01:41
マルチバイト文字列をこの世から消し去りたい
988デフォルトの名無しさん:2006/09/23(土) 01:21:36
I want to obliterate all the characters not used in the English-speaking world.
989デフォルトの名無しさん:2006/09/23(土) 02:09:43
>>986
984ではないが、
たとえば検索したり連結したりストリームと読み書きしたりなどといったことはBidirectionalであれば十分。
ランダムアクセスしたければvectorで扱えばよいと俺は思う。
990デフォルトの名無しさん:2006/09/23(土) 02:36:19
>>989
vector に入れてランダムアクセスできる型が basic_string に入れたら
ランダムアクセスできなくできなくなるのっておかしくね?
991デフォルトの名無しさん:2006/09/23(土) 02:57:38
>>990
basic_stringクラスそのもののことを言っているんじゃないかと。
992デフォルトの名無しさん:2006/09/23(土) 05:01:00
そのうち効率重視の sequential_string とかが出てくる夢を見た。
驚いて飛び起きたら、まだ5時だった。
993デフォルトの名無しさん:2006/09/23(土) 09:59:49
作るのは自由なんだぜ。
994デフォルトの名無しさん:2006/09/23(土) 11:58:31
Unresolved Issues: CVS-RC_1_34_0
http://engineering.meta-comm.com/boost-regression/CVS-RC_1_34_0/developer/issues_release_.html
まだまだみたいだな・・・
995デフォルトの名無しさん:2006/09/23(土) 13:41:12
次スレどうする?
今の内容で次スレ立てていいか?
996デフォルトの名無しさん:2006/09/23(土) 14:00:53
ダメ
997デフォルトの名無しさん:2006/09/23(土) 14:01:04
このスレ的にはボーランド相手にされてないかもしれないけど、

The unofficial BCB Boost patches
http://bcbboost.sourceforge.net/
1.34 では取り込まれる予定

くらいはテンプレのどっかに書いておいてあげたら?
998デフォルトの名無しさん:2006/09/23(土) 14:05:40
>>8 >>777-778 も仲間に入れてあげてよ。
あと、 >>879 もリンクに入れてあげて。
999デフォルトの名無しさん:2006/09/23(土) 15:05:07
Boostを語れゴラァ part3
http://pc8.2ch.net/test/read.cgi/tech/1158991211/l50

これでいいか?
1000デフォルトの名無しさん:2006/09/23(土) 15:11:18
>>999

でもリンクに入れるのは >>879 じゃなくて >>880 だったと思われ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。