トップページ⇒tech
988コメント299KB

Boostを語れゴラァ part5

■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS2007/10/18(木) 08:09:35
語って.はぁと part boost::mpl::int_<5>

過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■
Boost C++ Libraries
http://www.boost.org/

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

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

boost info
http://shinh.skr.jp/boost/
0602デフォルトの名無しさん2008/02/23(土) 23:17:07
おまえらカッコばかりつけやがって
0603デフォルトの名無しさん2008/02/23(土) 23:43:11
どうせコンパイラが最適化するんだから、ワークの変数にして短い変数で使う。
0604デフォルトの名無しさん2008/02/24(日) 02:10:18
*a->bと*a++は定型句に近いと思うんだが
0605デフォルトの名無しさん2008/02/24(日) 03:23:54
ここで*++aの出番だな
0606デフォルトの名無しさん2008/02/24(日) 06:23:10
intrusive_ptr にはなぜ reset() が無いんだろう
shared_ptr のノリで書いてるとついつい reset で代入しようとしてしまう
0607デフォルトの名無しさん2008/02/24(日) 10:45:24
俺は reset できない scoped_ptr が欲しいのだが.
単に reset しなけりゃいいじゃんといわれればそれまでだけど.
0608デフォルトの名無しさん2008/02/24(日) 11:21:25
resetのないインターフェースをscoped_ptrで実装
0609デフォルトの名無しさん2008/02/24(日) 11:58:03
resetをprivateにして継承する
0610デフォルトの名無しさん2008/02/24(日) 12:14:18
class A {
std::scoped_ptr<X> pX;
A : pX(new X) {}
}

もうね、コンストラクタの初期化リストで初期化した後は
一切触りたくないわけさ。ところで new X に失敗したら
コンストラクタ中で throw std::bad_alloc() していい?
0611デフォルトの名無しさん2008/02/24(日) 12:15:41
古いコンパイラでもなければ new が bad_alloc 投げるだろう。
0612デフォルトの名無しさん2008/02/24(日) 12:16:55
>>610
pXをconstにすればresetできなくなる。swapもできなくなるけど。
0613デフォルトの名無しさん2008/02/24(日) 12:49:57
>>612
そ、そうじゃん・・・
なんで今まで気づかなかったんだろ、俺。
0614デフォルトの名無しさん2008/02/24(日) 18:19:40
boost.pythonはお題目だけであんまり開発進んでないのか
期待してたのに
0615デフォルトの名無しさん2008/02/24(日) 18:31:28
C++からpythonのコードを呼び出す方の解説ページとかありますか?
逆は良く見るんだけど。。。
0616デフォルトの名無しさん2008/02/24(日) 19:24:55
動的結合図書館
0617デフォルトの名無しさん2008/02/24(日) 19:58:55
>>614
よく知らんけど、あれって汎用の言語ラッパとしては使えないんだっけ。
SWIGみたいな。でないとあまり Boost でやる意味ないような…
0618デフォルトの名無しさん2008/02/24(日) 20:02:13
Python以外のスクリプトは死滅するから問題ない
0619デフォルトの名無しさん2008/02/24(日) 20:30:51
個人的には JavaScript が好きなんだが・・・
だってプロトタイプが他の言語で C++ とずいぶん毛色が違うから.
まぁ boost 関係なく Mozilla のつくってる JavaScript の
エンジン使えばいいんだけどね.
0620デフォルトの名無しさん2008/02/24(日) 21:31:50
Mozilla以外にも実装はいくらでもあるしな
0621デフォルトの名無しさん2008/02/24(日) 22:04:07
ECMAScriptって言おうぜ
0622デフォルトの名無しさん2008/02/24(日) 22:09:31
>617
Boost.LangBinding というプロジェクトがあるそうだが停滞してるみたいね。
0623デフォルトの名無しさん2008/02/24(日) 22:30:22
あんなの粋狂でしょ。
そもそもboostはC++べったりだから。
0624デフォルトの名無しさん2008/02/24(日) 22:34:18
べったりて
当たり前だろ
0625デフォルトの名無しさん2008/02/24(日) 22:46:14
コンパイル時のC++の挙動にべったりなのに
他の言語でどうのこうの言う方がまぬけだよな
0626デフォルトの名無しさん2008/02/25(月) 02:09:33
boost.pythonを有効活用している具体例or実体験を聞きたいです
0627デフォルトの名無しさん2008/02/25(月) 02:18:37
boost.python の object, list, dict なんかのラッパクラスは結構便利
0628デフォルトの名無しさん2008/02/25(月) 02:20:49
現状ただ単にCインターフェースにちょっとラッパ被せただけだよね。 まぁ便利なんだけどboostでやることかと聞かれると首を捻る。

>>615
pythonドキュメントのapi.pdf参照
0629デフォルトの名無しさん2008/02/25(月) 18:41:59
boost::serializationを使ってXMLを出力してみたのですが
日本語を出力すると文字コードがすべてSJISになってしまっています。
しかし、XMLにはUTF-8との記述があり、正常なXMLにはなっていません。
内部ではwchar_t使っているので、できればUnicodeで処理したいのですが
そのようにするにはどうしたらいいでしょうか?
0630デフォルトの名無しさん2008/02/25(月) 18:48:14
woarchive使ったらとりあえず、全部UTF-8で処理してくれたので
それでいろいろやってみます。
0631デフォルトの名無しさん2008/02/25(月) 18:58:51
>>615
http://d.hatena.ne.jp/niitsuma/20080209/1203184397
リンク集ならあるよ
0632デフォルトの名無しさん2008/02/25(月) 19:15:09
ありがとうございます。
見て回ります。
0633デフォルトの名無しさん2008/03/01(土) 18:20:28
関連すれ
http://pc11.2ch.net/test/read.cgi/tech/1139266461/
0634デフォルトの名無しさん2008/03/01(土) 22:33:36
コンパイラの対応表ってどこでしたっけ?
0635デフォルトの名無しさん2008/03/01(土) 22:50:27
ttp://beta.boost.org/development/tests/trunk/developer/summary.html
1.35も大分安定してきたみたいだね
0636デフォルトの名無しさん2008/03/01(土) 23:06:50
さんくす
0637デフォルトの名無しさん2008/03/02(日) 04:00:28
(1, 2, 3, ... n)
n個の要素を受け取るシーケンス
(1, 2, 3, ... n)(1, 2, 3, ... n)(1, 2, 3, ... n) ... (1, 2, 3, ... n)
ってないの?作って良い?
0638デフォルトの名無しさん2008/03/02(日) 04:53:34
boost使用時のMakefileの書き方について教えて下さい。

-----------------------

//t00.cpp
#include<iostream>
using namespace std;

#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;

int main()
{
 matrix<int> mat0(2,2);
 for(int i=0; i<2; ++i){
  for(int j=0; j<2; ++j){
   mat0(i,j)=0;
  }
 }

 return 0;
}

-----------------------

をコンパイルするためのMakefileを以下のように書いたのですが、
うまく行きません。

0639デフォルトの名無しさん2008/03/02(日) 04:54:10
続き

-----------------------

CC = g++

OBJS = ./t00.o

OPTION = -I/home/hoge/usr/include/boost-1_34_1/
#OPTION =
PROGRAM = ./t00

.cpp.o :
 $(CC) -Wall -g -c $< -o $@

$(PROGRAM) : $(OBJS)
 $(CC) $(OBJS) -o $(PROGRAM) $(OPTION)

clean :
 rm -f $(OBJS)

-----------------------

boostは、/home/hoge/usr にインストールしました。
gcc バージョン 4.2.2 を使用しています。

g++ t00.cpp -o t00 -I /home/hoge/usr/include/boost-1_34_1/
でコンパイルできたので、同じようにMakefileに書いたつもりなのですが・・・

宜しくお願いします。
0640デフォルトの名無しさん2008/03/02(日) 05:07:52
>>639
なんで、どう「うまくいかない」のか書かないの?
何かの実験? 挑戦? 出題? エスパーの発掘?
0641デフォルトの名無しさん2008/03/02(日) 05:31:33
boost関係なくね
0642デフォルトの名無しさん2008/03/02(日) 12:33:13
>>626
Civilization4っていうゲームが、boost.python使ってた。
(インストールフォルダに、boost_python-vc71-mt-1_32.dllっていう見覚えのあるDLLが…)
Pythonでキャラクターの動きやUIの一部を書き換えられるようになってて、おかげでユーザーコミュニティが作った拡張が盛り上がってる。
一部は公式の拡張パックに取り入れられたり。
Pythonのおかげというよりは、ユーザーのいじれる部分をうまく切り出してる設計がよかったんだろうけど。

C++のソースも少しだけ公開されてたんだが特にboostばりばりって感じでもなかったな。
どちらかというと昔から見るような大クラス主義のC++。
0643デフォルトの名無しさん2008/03/02(日) 12:38:50
>642
ソースみたいです。
インターネットで公開しているんですか?
0644デフォルトの名無しさん2008/03/02(日) 12:44:19
>>642
そういう使い方もできるのか
組み込みというとLuaしか思い浮かばなかったがちょっと調べてみる
06456432008/03/02(日) 12:45:47
すいません。ありました。
http://www.gamershell.com/download_13312.shtml
0646デフォルトの名無しさん2008/03/02(日) 13:55:31
>>638です。
>>640
言葉足らずですみませんでした。
コンパイルがうまく行きません。
make時のエラーは以下の通りです。

g++ -Wall -g -c t00.cpp -o t00.o
t00.cpp:4:43: error: boost/numeric/ublas/matrix.hpp: そのようなファイルやディレ クトリはありません
t00.cpp:5: error: 'boost' has not been declared
t00.cpp:5: error: 'ublas' is not a namespace-name
t00.cpp:5: error: expected namespace-name before ';' token
t00.cpp: In function 'int main()':
t00.cpp:9: error: 'matrix' was not declared in this scope
t00.cpp:9: error: expected primary-expression before 'int'
t00.cpp:9: error: expected `;' before 'int'
t00.cpp:12: error: 'mat0' was not declared in this scope
make: *** [t00.o] エラー 1
0647デフォルトの名無しさん2008/03/02(日) 14:06:03
>>646
--
.cpp.o :
 $(CC) -Wall -g -c $< -o $@
--
どう見ても、OPTION渡してないじゃん。
スレ違いだからこれ以上ここで質問するなよ。
0648デフォルトの名無しさん2008/03/02(日) 14:52:02
>>678
ありがとうございました。
スレ違い申し訳ないです。
0649デフォルトの名無しさん2008/03/03(月) 08:19:41
>>678 に期待。
0650デフォルトの名無しさん2008/03/03(月) 15:11:45
boost導入してみたんだけど、何か便利に使えないかと思って
Windowsのコンテナ系コントロール(リストボックス、コンボボックス、
リストビュー類)用のイテレータを定義してみた。

MyListBox box;
...
BOOST_FOREACH(MyCtrlItem<MyListBox>& e, box)
{
  if(e.GetSel())
  {
    ...
  }
}

こんな風に使えて、かつコントロールの種類に関係なく列挙・操作できる
ようになったけど、こういう使い方ってアリなのかね?
0651デフォルトの名無しさん2008/03/03(月) 15:21:20
ありだとは思うけど、MFCより便利になって気がしないw
どうせなら、MFCを超える勢いで頼む。
0652デフォルトの名無しさん2008/03/03(月) 15:52:18
>>651
自分としてはWTLの拡張クラスみたいなもの作って使ってるんでMFCは比較対象外だなぁ。
あとFileFind系とDropFiles系もイテレート可能にしてみた。これも割と便利かも。
0653デフォルトの名無しさん2008/03/03(月) 16:08:18
STLSoft で、MFCSTL とか WINSTL とか ATLSTL とか公開してる。便利
www.stlsoft.org
0654デフォルトの名無しさん2008/03/03(月) 16:10:26
FileFindはWinSTLがやっているな。
0655デフォルトの名無しさん2008/03/03(月) 16:17:32
bjamに昔あったsTOOLSとかinstallというオプションはなくなったのですか?
0656デフォルトの名無しさん2008/03/03(月) 16:44:40
バージョンが 2 になったから色々変わっている
0657デフォルトの名無しさん2008/03/03(月) 17:04:20
BOOST_FOREACHのループ内で、要素が何番目なのか取り出す方法ってあるんでしょうか?
現在の要素のイテレータ名が取れるならdistance(begin, it)で得られるかと思うんですけども。
0658デフォルトの名無しさん2008/03/03(月) 18:06:29
普通にforで良いんじゃね?
0659デフォルトの名無しさん2008/03/03(月) 18:39:51
>>657
それはたいていforeachですべきでない
非効率なことをしようとしている信号
0660デフォルトの名無しさん2008/03/03(月) 18:44:10
配列と外部のストレージ(ListBoxコントロール等)を同期させるのに、総嘗めするだけだが
一箇所だけインデックスが欲しい、ということはあるな。

ちなみにforeach.hpp読んでみたけどそれっぽいのが見付けられなかった。
range_iteratorかforeach_iteratorあたりが取り出せれば行けるのかな?
0661デフォルトの名無しさん2008/03/03(月) 20:26:09
もうGUIまわりは C++/CLI にうつってしまいますた,俺.
0662デフォルトの名無しさん2008/03/03(月) 20:33:13
C++/CLI使うくらいならC#使ってそこからC++で書いたDLLを
0663デフォルトの名無しさん2008/03/03(月) 21:42:14
>>662
C++/CLIってC++のクラスライブラリって使えたっけ?
0664デフォルトの名無しさん2008/03/03(月) 22:36:19
>>663
もちろん。そのためのC++/CLIだ。

ではなくて、C#の打ち間違いだよな。常考。
0665デフォルトの名無しさん2008/03/04(火) 02:23:36
>>655
今はこんな感じ
bjam --toolset=msvc-8.0 --prefix=C:\Boost install
0666デフォルトの名無しさん2008/03/04(火) 02:50:01
vc71&stlportでビルドしたけどめっさ苦労した
0667デフォルトの名無しさん2008/03/04(火) 06:10:15
vc8&stlportでビルドしようと思ったけど挫折した
0668デフォルトの名無しさん2008/03/04(火) 08:07:12
vc9(x64)でビルドしたけどうまく動くのかは謎
0669デフォルトの名無しさん2008/03/04(火) 09:54:18
Boost.Buildにまかせっきりでビルドしたことない
0670デフォルトの名無しさん2008/03/04(火) 16:34:19
GUIとか速度が必要ないなら処理なら便利な言語にswigで渡す
boost.pythonはどうだ?

0671デフォルトの名無しさん2008/03/04(火) 16:41:10
boost.n88basic

とかあったら思わず採用してしまいそうだ
0672デフォルトの名無しさん2008/03/04(火) 16:42:07
boost.lua

は作る気があるらしい
ttp://boost.cvs.sourceforge.net/boost/boost/boost/luabind/
0673デフォルトの名無しさん2008/03/04(火) 19:18:57
boost.cobol あったらコボラでも使える言語に!



…ならんなw
0674デフォルトの名無しさん2008/03/04(火) 19:20:37
boost.braif*ck
0675デフォルトの名無しさん2008/03/04(火) 19:30:19
boost.cli C++/CLI用
type_traits - is_ref_typeとかadd_handleとか。
function, bind - デリゲートも関数オブジェクトとして使える。デリゲートに変換できる。
0676デフォルトの名無しさん2008/03/04(火) 20:34:47
boost.unlambda欲しいな
0677デフォルトの名無しさん2008/03/04(火) 20:38:08
boost.cplusplus
0678デフォルトの名無しさん2008/03/04(火) 20:45:05
boost.haskell
0679デフォルトの名無しさん2008/03/04(火) 20:45:14
boost.fortran
スパコン向け
0680デフォルトの名無しさん2008/03/04(火) 21:07:40
boost.yeild
0681デフォルトの名無しさん2008/03/04(火) 21:08:50
boost.mathematica
0682デフォルトの名無しさん2008/03/04(火) 21:09:46
boost.life
0683デフォルトの名無しさん2008/03/04(火) 21:16:10
boost.boots
0684デフォルトの名無しさん2008/03/04(火) 21:55:51
boost.boost
0685デフォルトの名無しさん2008/03/04(火) 22:03:11
boost.worst
0686デフォルトの名無しさん2008/03/04(火) 23:04:57
boost.virtual_machine
0687デフォルトの名無しさん2008/03/04(火) 23:31:59
boost.jit
0688デフォルトの名無しさん2008/03/04(火) 23:34:16
boost.dos
0689デフォルトの名無しさん2008/03/05(水) 00:01:07
boost::end(>>670-) == this;
0690デフォルトの名無しさん2008/03/05(水) 00:02:42
>>689
うまい、座布団1枚。
0691デフォルトの名無しさん2008/03/05(水) 01:19:55
意外と人がいるのねw
0692デフォルトの名無しさん2008/03/05(水) 11:08:53
ひとり
0693デフォルトの名無しさん2008/03/05(水) 11:52:56
ふたなり
0694デフォルトの名無しさん2008/03/05(水) 12:22:55
3P
0695デフォルトの名無しさん2008/03/05(水) 13:02:42
boost.Gauche
を誰かつくってほしい
正直これでは機能不足
http://homepage.mac.com/naoki.koguro/prog/c-wrapper/index-j.html
0696デフォルトの名無しさん2008/03/05(水) 21:15:28
boost.xmlが欲しいね。serializationではなく。
機能的にはlibxmlで足りているのだけど、標準化されて欲しい。
0697デフォルトの名無しさん2008/03/05(水) 23:26:32
BGLでDOM操作とか。
みんなXMLの処理には何使ってんの?
expatは使ってる?
バリデーションとかには?
スレ違いか。
0698デフォルトの名無しさん2008/03/06(木) 16:40:00
>>697
俺は用途次第、としか言いようがないな。
例えばゲームの敵情報やマップ情報みたいに実行中不変でそれなりに量があるものはexpatでSAXだし、
プログラムのコンフィグみたいに実行中可変で保存の必要があるようなものは
expatでパースする簡単なDOMみたいな独自ライブラリを使ってる。
Xercesはなんか巨大すぎるんだよな。 文字型とか文字列型とかリスト型とか全部Xerces独自のだし。

boost.xml的なものが欲しいっていうのは激しく同意。
SAX的なものはexpatで十分に事足りるから、C++に親和性の高いDOM的なものが欲しい。 あとpull-parser。
現状DOMってどう見てもJava用に設計されました、って感じでC++の実装は無理矢理感が漂うし。
0699デフォルトの名無しさん2008/03/06(木) 18:02:13
.NET の XmlReader とかににたやつ?
0700デフォルトの名無しさん2008/03/06(木) 22:29:16
たいていUTF8で扱われるXMLはテンプレートでパラメタライズする必然性を感じない。
個人的にはspiritもテンプレートで提供しているから使いにくいと感じる。
0701デフォルトの名無しさん2008/03/07(金) 00:03:49
なんで突然テンプレート?
0702デフォルトの名無しさん2008/03/07(金) 03:06:15
俺の中ではspiritは神
■ このスレッドは過去ログ倉庫に格納されています