Boostを語れゴラァ part3 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/09/23 15:00:11
語って.はぁと part boost::mpl::int_<3> 

前スレ
part 2 スレリンク(tech板)
part 1 スレリンク(tech板)

■関連サイト■ 
Boost C++ Libraries 
URLリンク(www.boost.org) 

Boost 翻訳プロジェクト 
URLリンク(boost.cppll.jp) 

Let's Boost 
URLリンク(www.kmonos.net) 

boost info 
URLリンク(shinh.skr.jp) 

2:デフォルトの名無しさん
06/09/23 15:01:35
■関連書籍■
Boost C++ Libraryプログラミング
URLリンク(www.amazon.co.jp)

Beyond The C++ Standard Library
URLリンク(www.amazon.co.jp)

C++ Template Metaprogramming
URLリンク(www.amazon.co.jp)

The Boost Graph Library
URLリンク(www.amazon.co.jp)

■関連スレ■
C++相談室 part46
スレリンク(tech板)

【C++】STL(Standard Template Library)相談室 4
スレリンク(tech板)

BOOTSを語れゴラァ part2
スレリンク(tech板)


3:デフォルトの名無しさん
06/09/23 15:03:31
Loki
URLリンク(sourceforge.net)

JTC1/SC22/WG21 - The C++ Standards Committee
URLリンク(www.open-std.org)

POCO, the C++ Portable Components 
URLリンク(www.appinf.com)
URLリンク(sourceforge.net)

The unofficial BCB Boost patches
URLリンク(bcbboost.sourceforge.net)

4:デフォルトの名無しさん
06/09/23 15:04:37
> 1.34 では Pointer Container のシリアライザも用意されるみたいだね 
URLリンク(boost.cvs.sourceforge.net)

Unresolved Issues: CVS-RC_1_34_0 
URLリンク(engineering.meta-comm.com)  

5:デフォルトの名無しさん
06/09/23 15:19:51
>>4 のリンクがうまくはれていないので修正。
Unresolved Issues: CVS-RC_1_34_0
URLリンク(engineering.meta-comm.com)
>>1

6:デフォルトの名無しさん
06/09/23 20:09:13

ところで前スレはどういう流れだったっけ

7:デフォルトの名無しさん
06/09/23 20:19:46
コレ、まだ残ってたのかw↓
BOOTSを語れゴラァ part2
スレリンク(tech板)

8:デフォルトの名無しさん
06/09/23 20:43:09
>>7
そこはどう見ても履き物についてのスレだw

9:デフォルトの名無しさん
06/09/23 20:59:44
板違いスレか、服飾系板に強引に立てたネタスレかと思ったら素で間違えてんのかw

10:デフォルトの名無しさん
06/09/23 21:39:37
ずいぶんと懐かしいな

11:デフォルトの名無しさん
06/09/23 22:48:14
>>7
ホンマにブーツの話してるしw

12:デフォルトの名無しさん
06/09/24 00:08:55
>>11
間違いは間違いとして、その後で内容のほうを合わせようという建設的な態度は評価できるな

13:デフォルトの名無しさん
06/09/24 00:23:34
そういえば、自らの国家や民族に固執する(ry じゃなくて、C#スレを立てようとした 1 が
スレタイに半角の # が使えないことを知らなくてスレタイから # が消えて、
そのまんま C 言語のスレになったってのもあったな。

14:デフォルトの名無しさん
06/09/24 00:49:11
1のリンク先のレッツブーストつぶれちょる?
version134ていつでるんでしょうか、10月中にはでます?

15:デフォルトの名無しさん
06/09/24 01:31:11
>>14

いや、ちゃんとあるよ。
>>1のURLから最後の空白を削ってみろ

16:デフォルトの名無しさん
06/09/24 05:09:00
うむむ、なぜか空白が追加されてるね、末尾に。
>>1 のリンクって。

17:デフォルトの名無しさん
06/09/24 06:18:04
boost::filesystem の directory_iterator って、
いわゆるコンテナクラスライブラリのイテレータとは書式が違うね。

18:デフォルトの名無しさん
06/09/24 09:10:31
違わない。

19:デフォルトの名無しさん
06/09/24 09:40:14
あ、ごめん、begin() とか end() とか無いね、
って言う意味だった。

20:デフォルトの名無しさん
06/09/24 09:45:17
それはコンテナの方の特徴だな。
begin()/end()を持っている方が少数派。
例えばiostream。

21:デフォルトの名無しさん
06/09/24 17:51:52
Visutl Studio 2005 Express Edition で Boost をインストールしようとしたのですが
ワーニングがいっぱいでて1時間以上まって エラーも5個でて、

regexp の例題をコンパイルしてもエラーでだめでした。(エピステーメさんのHPの)

Boost を 2005 EE にインストールする方法を書いてあるHPがありましたが教えてください。

よろしくおねがします。

22:デフォルトの名無しさん
06/09/24 18:03:18
有ったのか無かったのかどっちやねん

23:デフォルトの名無しさん
06/09/24 19:49:32
boost_1_33_1 は変な文字コードがまざってるから、VC++ 2005 だと警告が出ますね。
該当コメントを削除しちゃえば出なくなりますよ。

Copyright 宣言もあるから、削除したのを再配布するのはよくないね。

boost_1_33_1/boost/filesystem/exception.hpp
boost_1_33_1/boost/filesystem/directory.hpp
boost_1_33_1/libs/filesystem/src/exception.cpp
boost_1_33_1/libs/filesystem/src/operations_posix_windows.cpp
(c) と、Dietmar なんちゃらって人の名前。

boost_1_33_1/boost/lexical_cast.hpp
boost_1_33_1/boost/type_traits/is_base_and_derived.hpp
Terje なんちゃらって人の名前。

boost_1_33_1/libs/regex/src/regex_traits_defaults.cpp
キャラクタテーブルのコメント。いぱーい。


24:デフォルトの名無しさん
06/09/24 20:23:11
>>23 Unicode で保存し直すとかでも回避できたっけ?

25:デフォルトの名無しさん
06/09/24 20:34:16
>>21
何をして何のエラーが出たのか書いてよ。

PlatformSDK Build Environment
vcvars32.bat
boost/regex/user.hpp ->例題によってはこれの設定必要
bjam
の順で自分はやってるけど?

26:デフォルトの名無しさん
06/09/24 22:09:10
なんで lexical_cast<std::wstring> はあるのに、
lexical_cast<std::string> は無いんだろう。

27:デフォルトの名無しさん
06/09/24 23:07:45
使えるけど...

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
std::string s1 = boost::lexical_cast<std::string>(1234);
std::string s2 = boost::lexical_cast<std::string>(3.14);
std::cout << s1 << std::endl << s2 << std::endl;
return 0;
}


28:デフォルトの名無しさん
06/09/25 10:33:45
auto_ptr から shared_ptr に所有権を移しかえられますか?

boost::shared_ptr<T> sp;
std::auto_ptr<T> ap(new T);
sp = ap;

この後、sp を使って当該オブジェクトを弄り回したいんですが、
ap はきちんと所有権を失っていてくれることが保証されていますか?
つまり ap も所有権を主張していて、スコープを外れた途端に
いきなりデストラクタを呼び出しに行ったりしませんか?


29:デフォルトの名無しさん
06/09/25 10:51:52
>>28
URLリンク(boost.cppll.jp)

30:デフォルトの名無しさん
06/09/25 10:54:55
気になるなら明示的にrelease()すればいいんじゃね


31:デフォルトの名無しさん
06/09/25 10:57:53
>>28
何故自分で試さない?

32:デフォルトの名無しさん
06/09/25 11:37:05
>>29
リンク先の「タイプ量(コード量)を減らそうとして...」ての知らなかたよ。


33:デフォルトの名無しさん
06/09/25 12:26:03
eps_p(P)でPにセマンティックアクション付けられないの?

34:デフォルトの名無しさん
06/09/26 12:54:58
>>21
多分一部のlibコンパイルに失敗してる
奇遇にも昨日EEへの導入したときに同じヘマしたので俺の場合の解決手順を書いとこう 
EEインスコの自動設定以外の(SDKとかへの)パスは通してない

set INCLUDE=C:\Program Files\Microsoft Platform SDK\Include
C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat をDOS窓に投げて実行
bjam -sTOOLS=vc-8_0 --prefix="C:\Program Files\Microsoft Visual Studio 8\VC" install

事前にDOS窓の高さバッファ9999にするとか
--prefix をわざとD:\Prog.. ってして作業内容把握できるようにすると判りやすいかも

35:デフォルトの名無しさん
06/09/26 21:33:46
>>33
eps_p(p) >> p[f] ではだめなのか?


36:デフォルトの名無しさん
06/09/26 23:04:56
>>35
ちょっと量が多すぎてvectorにpush_backじゃ厳しいから
まずPにマッチする行数をincrement_aでカウントした後一気にメモリー確保して、
その後でdetailed_Pで実際にパースしようとしてるんだわ。
そうしたらマッチしてるのにセマンティックアクションが動かなくてさ。
うまくいかないからとりあえず普通にPでマッチさせて、そこからもう一回
bindでparse呼んでるんだけど、これが正しい解なのか悩んでる。

37:デフォルトの名無しさん
06/09/27 02:19:48
ドキュメントに書いてあるんだが。

URLリンク(www.boost.org)


38:デフォルトの名無しさん
06/09/30 00:11:40
|ω・)  1_34は〜まだかな〜

39:デフォルトの名無しさん
06/09/30 20:11:48
1.34はコードの量が倍くらいになるんじゃないか

40:デフォルトの名無しさん
06/09/30 22:40:11
bcc5.5 日本語でboost のビルドは
無理なんでよね?^^;

41:デフォルトの名無しさん
06/09/30 23:45:34
日本語でビルドってどういう意味だ?

42:デフォルトの名無しさん
06/09/30 23:48:41
ライブラリの構築、ぐらいでいいんじゃね?

43:デフォルトの名無しさん
06/10/01 00:16:46
「構築する」

44:デフォルトの名無しさん
06/10/01 00:32:57
んじゃコンパイルは

45:デフォルトの名無しさん
06/10/01 00:45:35
>>44
元来の英語の意味は「蒐集する、編纂する」というニュアンス。
コンピュータ用語としては「コンパイル」が広く普及しているので、そのままで桶。

46:デフォルトの名無しさん
06/10/01 00:50:42
コンパイルは、過労働で疲労困憊する、ってことかと思ってました。

47:デフォルトの名無しさん
06/10/01 00:51:40
あれだろ。サイレントメビウス書いた人の漫画

48:デフォルトの名無しさん
06/10/01 01:17:53
関数を書くときに
OptionalとExpressionTemplate使って辺値を
数式と計算に分離できるようにできるかな?

できたら数式のままいろんな計算できそうなんだけども。


49:デフォルトの名無しさん
06/10/01 01:20:59
のーみそこねこね

50:デフォルトの名無しさん
06/10/01 01:52:05
最近ハートが付いて復活したな…

51:デフォルトの名無しさん
06/10/01 06:59:28
1.34 全裸正座待ち中

52:デフォルトの名無しさん
06/10/01 08:43:49
CVSで最新取って来ればいいのに

53:デフォルトの名無しさん
06/10/01 09:28:27
プレイだから

54:デフォルトの名無しさん
06/10/01 16:40:13
日本人は低能知能なのには呆れますね。
私達中華人民はあなたたちの掲示板を拝見して笑ってみてますよ。ではありがとうございました。

55:デフォルトの名無しさん
06/10/01 17:01:27
ありがとう!

56:デフォルトの名無しさん
06/10/01 17:18:50
礼儀正しい方だね

57:デフォルトの名無しさん
06/10/02 00:49:04
こころゆくまで拝見してください

58:拝して見るのはあくまで自分な
06/10/02 12:19:15
>>57
日本語でどうぞ。

59:デフォルトの名無しさん
06/10/02 12:22:28
>54を見れ

60:デフォルトの名無しさん
06/10/02 12:58:34
自敬表現も日本語だろ。

61:デフォルトの名無しさん
06/10/02 19:30:53
中華人民は煽りも丁寧だな。さすが中華

62:デフォルトの名無しさん
06/10/02 23:41:17
うむ、我々もこういった物腰を見習わなければならんね。

63:デフォルトの名無しさん
06/10/03 00:51:37
他のスレでもやってたけど、ここでも塩撒いとこうぜ。
六四事件 天安門

64:デフォルトの名無しさん
06/10/03 06:57:16
台湾独立万歳!

65:デフォルトの名無しさん
06/10/04 12:38:27
まあ俺らがこのスレでやってることは彼らが2000年位前にすでに通った道だからな

66:デフォルトの名無しさん
06/10/04 12:43:21
>>65
そうそう。今では見る影もないけどね。>彼ら

67:デフォルトの名無しさん
06/10/04 15:53:11
じゃあ、俺たちもいずれ・・・

68:デフォルトの名無しさん
06/10/08 01:51:46
boost::operators見てこんな書き方が出来るの初めて知ったよ…

struct foo {
friend bool operator+(const int &lhs, const foo &rhs) {
//...
};
};

69:デフォルトの名無しさん
06/10/08 02:01:04
割と基本的なことだな

70:デフォルトの名無しさん
06/10/08 02:01:39
Barton-Nackman Trick
その本来の目的で使われることが無くなった、
興味深いworkaroundのコード。
テンプレート関数のオーバーロードができなかった時代に考案されたという……。
ADLの助けを借りずしてその関数を呼び出すことは不可能とされている。

民明書房「黎明期の貧弱なコンパイラとその制約」より

71:デフォルトの名無しさん
06/10/08 04:05:12
wserializationって、もしかしてまだ準備中?
Boostを導入しようと思ったきっかけが
シリアライズが楽にできそう、なんで、いきなり挫折しそう

72:デフォルトの名無しさん
06/10/08 23:41:59
特に問題はないと思うが。
ただ大域locale(std::locale::global)の設定をしないとうまくいかない場合があるはず。


73:デフォルトの名無しさん
06/10/09 19:16:27
>>72
よかった、頑張ってみます
さんくす

74:デフォルトの名無しさん
06/10/10 00:04:36
boost::filesystem::wpath
1.34 わくわく

75:デフォルトの名無しさん
06/10/10 09:41:46
てか、まだ 1.34 のレグレッションテストぜんぜん通ってないよ。

76:デフォルトの名無しさん
06/10/10 20:07:44
vc8 + STLport5.0.2 + Boost1.33.1の組み合わせを実行している人っていますか?

77:デフォルトの名無しさん
06/10/10 22:07:18
残念。
俺はvc8 + STLport5.1.0 + Boost1.33.1だ。

78:デフォルトの名無しさん
06/10/10 23:31:01
1.34て今年中には出るのか!?

79:76
06/10/11 12:53:48
>77さん
よろしければ その時のBOOSTのインストール方法をお教えいただけますか?

80:デフォルトの名無しさん
06/10/11 19:00:27
>>68
というか、「出来ないんじゃないか」と考える理由の方がわからんが?

81:73
06/10/11 20:35:01
あれから、ワイド文字を使わないシリアライズはできるようになりました
しかし、wchar_t文字列のシリアライズコードを書いてみたのですが動作しません
コードは25行なんですが、コードに関する質問は
質問スレのほうに書いたほうがよいでしょうか


82:デフォルトの名無しさん
06/10/11 20:37:58
ここでしなかったらスレが無駄過ぎる

83:73
06/10/11 20:47:31
そうですね、では

現在、コンパイルすると次のエラーがでます
C2027: 認識できない型 'boost::STATIC_ASSERTION_FAILURE<x>' が使われています
↑コンパイル時の展開関係などがわかるようなデバッガがほしい・・

以下コード。
#include <tchar.h>
#include <locale>
#include <iostream>
//#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_woarchive.hpp>
//#define BOOST_LIB_NAME boost_serialization
#define BOOST_LIB_NAME boost_wserialization
#include <boost/config/auto_link.hpp>

class test{
 wchar_t* str;
 template <class Archive>
 void serialize(Archive& ar, const unsigned int version){
  ar & str;
 }
 test(){_tcscpy_s(str,(sizeof(_T("TEST"))+1)*2,_T("TEST"));}
};
int main(){
 test te();
 std::locale::global(std::locale("japanese"));
 boost::archive::text_woarchive oa(std::wcout);
 //boost::archive::text_oarchive oa(std::cout);
 oa & te;
 return 0;
}

84:73
06/10/11 20:53:31
あ、メモリ確保してない^^;

85:デフォルトの名無しさん
06/10/11 22:08:27
>>83
C2027ってことはVisual C++だろ。
出力の中から、エラーを起こしたテンプレートがどこから実体化されたのか辿れるようになっている。

86:73
06/10/11 22:21:21
>>85
まじすか、情報ありがとうございます!

あの後、組み込み型での実行は諦めてwstringバージョンを作りました
一応ちゃんと動作しますが、#elifディレクティブのほうは文字化けします

#include <tchar.h>
#include <string>
#include <iostream>
#include <fstream>
#include <locale>
#include <boost/archive/text_woarchive.hpp>
#include <boost/archive/text_wiarchive.hpp>
#include <boost/serialization/string.hpp>
#define BOOST_LIB_NAME boost_serialization
#include <boost/config/auto_link.hpp>

87:73
06/10/11 22:23:10
class Test{
public:
 Test(std::wstring s):str(s){};
 std::wstring str;
private:
 friend class boost::serialization::access;
 template<class Archive> void serialize(Archive& ar, const unsigned int version){
  ar & str;
 }
};

int main(int, char**){
 std::wcout.imbue(std::locale(""));
 Test te(_T("日本語文字列の入力テスト"));
#if 1
 std::wofstream ofs(_T("out.txt"));
 boost::archive::text_woarchive oa(ofs);
 oa & te;
 ofs.close();
 std::wifstream ifs(_T("out.txt"));
 boost::archive::text_wiarchive ia(ifs);
 ia & te;
 ifs.close();
 std::wcout << te.str << std::endl;
#elif 1
 boost::archive::text_woarchive ar(std::wcout);
 ar & te;
#endif
 return 0;
}

88:77
06/10/11 22:23:11
>>79
まずはbjam.exeをゲットしてboostのフォルダに入れておく。
それから、次のようなバッチファイルを作って、実行。

cd "boostのフォルダ"
set INCLUDE=STLportのヘッダのフォルダ;%INCLUDE%
set LIB=STLportのライブラリのフォルダ;%LIB%
call "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
bjam -sTOOLS=vc8_0 --prefix="ライブラリの生成先フォルダ" install

深くは使ってないんで、完璧にうまくいってるかは分からないけど。

89:76
06/10/12 13:23:24
77さん書き込みありがとうございます。
その方法でやってみるとBoostとSTLportがVC8上で共存できませんでした。

>bjam -sTOOLS=vc8_0 --prefix=
ではなく
bjam -sTOOLS=vc8_0-stlport --prefix=
が公式HP上で出るのを待つしかないのでしょうか??


90:デフォルトの名無しさん
06/10/12 15:28:52
>>89
ぐぐったらでてきた
URLリンク(d.hatena.ne.jp)

91:77
06/10/12 18:42:34
普通に使えてるけど……

92:デフォルトの名無しさん
06/10/12 20:51:42
もはやboost無しでは生きていけない。
cygwinにboostのパッケージが用意されていて助かった。


93:デフォルトの名無しさん
06/10/12 21:01:59
じゃぁ死ね

94:デフォルトの名無しさん
06/10/12 21:07:00
>>93
何だとゴルァ!

95:デフォルトの名無しさん
06/10/12 21:32:05
C++をどっぷりやってる人のblogとかは
boost使ってない事が無いな

96:デフォルトの名無しさん
06/10/12 21:36:26
boost禁止のプロジェクトにアサインされて死ねばぁ

97:デフォルトの名無しさん
06/10/12 21:58:03
つうかboostOKのプロジェクトなんてそうないだろ



98:デフォルトの名無しさん
06/10/12 22:02:52
>>95
んなこたない。boost使ってない奴はC++にどっぷりじゃないと思ってるだけだろ

99:デフォルトの名無しさん
06/10/12 23:26:17
>>98
つまり>>95にとって「C++どっぷり」と「boost使う」が同値なわけか

100:デフォルトの名無しさん
06/10/12 23:30:55
C++に詳しい奴がboost使うと思ってるんだろ。
実際は逆なんだけどな。

101:デフォルトの名無しさん
06/10/12 23:36:14
ああ、本当にC++に詳しい奴はBoostを作る、だからな。

102:デフォルトの名無しさん
06/10/12 23:37:59
>>100
逆っていうか、相関性はあまりない気が
詳しいかどうかじゃなくて、便利だから使うだけだしな

103:デフォルトの名無しさん
06/10/12 23:38:10
>>100-101
激しく同意


104:デフォルトの名無しさん
06/10/12 23:56:51
どっぷりというか魅せられた奴が多いとは思う

105:デフォルトの名無しさん
06/10/13 00:10:38
>>95
アイディアとかは参考にするし、似たようなもの実装することもあるし、
既に似たようなもの作ってたりとかだなあ。
スレッドとかファイルシステムとかのライブラリって結局自前じゃないと
いろいろ融通が利かなくって、他人のはめんどくさい気がするんだよなあ。
ちょっとずれるけど、C++もCPANみたいにFTPとかXMLとか応用的なライブラリが
まとまって管理されたりするといいなあとか思うな

106:デフォルトの名無しさん
06/10/13 00:35:18
GILみたいになんでもかんでもboostに投げればいいんじゃないかな?

107:デフォルトの名無しさん
06/10/13 07:54:25
大したことない自前ライブラリ使ってるから投げられないと思われ

108:デフォルトの名無しさん
06/10/13 08:55:25
まあ新しいライブラリとかが出たときは、いつでも「なんでもできるし、
もう自分で作る必要はない」とか売り文句がついてくるんだけどさ。
OWLとかMFCもATLもそうだったけど、そういうのの上位に作るとさ、その
ライブラリの衰退と共に自分のコードも死んじゃうんだよね。
あと、自前はたいしたことなくていいんだよ。必要なときに必要な箇所を
実装すればいいんだからさ。

109:デフォルトの名無しさん
06/10/13 09:12:12
Boostはその特性からして、衰退するときはC++と同時だと思うが。

110:デフォルトの名無しさん
06/10/13 09:29:40
それはそうかもね。MFCとかよりはだいぶ標準よりだろうし。
まあ、boostの場合は衰退の前にもっと繁栄しないとかなと。。

111:デフォルトの名無しさん
06/10/13 10:17:36
今は、C++からの逃げ道としてC#やjavaが用意されている時代です。

112:デフォルトの名無しさん
06/10/13 12:16:24
>>101
boostの開発者は自分で使いたいから作ったんじゃないの?
自分では使わないけれど他人に使わせるために作ってるわけ?
105の言うとおりに同等品を既に作ってあるとかなら別だけど。

113:デフォルトの名無しさん
06/10/13 12:37:39
人は何故mplを作るのか?
そこにテンプレートメタプログラミングがあるからだ。

114:デフォルトの名無しさん
06/10/13 12:42:21
>>112
ただboostを使ってるだけの連中は、boostを作ってる連中に比べれば全然C++に詳しくない。
って話だろ?

115:デフォルトの名無しさん
06/10/13 12:44:10
プロジェクトで使えなくとも、Boost のヘッダ見て部分的に移植するのは
いろいろと勉強になって楽しいけどな
特に detail/ 以下漁るといろんなモノ発掘できて楽しいw

116:デフォルトの名無しさん
06/10/13 12:48:55
>>114
ただC++コンパイラを使っているだけの連中は、C++コンパイラを作っている連中に比べれば(ry

117:デフォルトの名無しさん
06/10/13 19:18:21
>>115
たしかに。lightweight_mutex (shared_ptr で使用)だの、
phoenix (spirt で使用) だのは、ブラッシュアップして表に出して欲しいくらい。

118:デフォルトの名無しさん
06/10/13 22:14:55
でも、同等機能が複数あるのはやだなあ。統一してほしいものだ。
phoenixはlambdaと統合中とかどこかでみたような。。

119:デフォルトの名無しさん
06/10/14 13:11:22
>>105
順番の問題じゃない?下位のクラスが安定してきたらそのうちできるでしょ。
spirit使えばXMLパーサの実装も理屈的にはBNFを移すだけになるしさ。

120:デフォルトの名無しさん
06/10/14 16:27:50
C++ の場合は空間効率と実行効率の要求が分野によって全然違う上に、
そこをいくらでもチューンナップできる自由度もあるので、
なかなか汎用的な低レベル層を作るのは難しいという気がする。

で、それをテンプレートポリシー化によって汎用的にしすぎると
今度はコンパイル時間が許容できなくなったり、言語非互換の壁に
ぶちあたったりするという罠。

121:デフォルトの名無しさん
06/10/16 17:59:04
伸びないねこのスレ

C++は詳しくないけど面白そうなのでboost::spiritを学び始めた
どういったことに使おうかなーって思って
BNFの具体的な使われ方を調べようと思ったんだが
ググっても基本的な使い方ばっかりがヒットするorz

正規表現雑技のページとかが理解できたら
幅が広がりそうだが
今度は逆に応用過ぎて理解できない

122:デフォルトの名無しさん
06/10/16 18:19:59
おもしろいけど
ミニ電卓作るとか
自前でXMLパーサ作る位しか思いつかなかった

頭ひねって普通にCで書いた方がコンパイル速度でイライラしなくて済むけど…

123:デフォルトの名無しさん
06/10/16 19:26:36
すでにある程度作ってしまったプログラムの構造を変えずに
おまけ機能を追加するときに、
bindとかは大活躍してる

lambdaは使いこなせてない

124:デフォルトの名無しさん
06/10/16 20:11:14
そこでboost::lambda::bindですよ。

125:デフォルトの名無しさん
06/10/17 00:01:29
boost::interprocessって8月のも10月のもexampleにある奴すら
ビルドできないんだけど、誰かどこに手を入れればいいかわかる人居ます?

126:デフォルトの名無しさん
06/10/17 08:53:42
まあまだ日本で実務でばりばり使ってますって人は少ないんじゃない?
C++上級者が興味を持って、調べてる的な感じだよね。
てか、商用ではJavaかスクリプトになりそうだから、クロスでC++って
需要あんまなさそうとか。。

127:デフォルトの名無しさん
06/10/17 15:02:46
C++を(C++的に)使ってる人自体がまず少なそう。

128:デフォルトの名無しさん
06/10/17 15:33:05
んなアホな

129:デフォルトの名無しさん
06/10/17 16:11:04
lang = c++
lang == c
こういうことか!

…すいません。でも仕事で非標準(かつ多機能)のライブラリの利用を認めてるとこは多くないんじゃない?

130:デフォルトの名無しさん
06/10/17 18:35:35
shared_ptrに感動しますた
さりげなくスレッドセーフになっていてcoolです

131:デフォルトの名無しさん
06/10/17 21:50:45
スレッドセーフだったっけ?

132:デフォルトの名無しさん
06/10/17 21:55:43
参照カウンタの部分はスレッドセーフだな

133:デフォルトの名無しさん
06/10/17 22:47:21
誘導されてきました

int main(int argc, char * argv[])
{
boost::numeric::ublas::vector<float > vec(2);

vec(0)=1.0;vec(1)=2.0;
boost::function1<
float,boost::numeric::ublas::vector<float>
> norm_2Functor = &boost::numeric::ublas::norm_2<boost::numeric::ublas::vector<float> >;
float out= norm_2Functor(vec) ;
}

想定外のメモリーを参照しました
で落ちる。何が悪いのだろう。


134:デフォルトの名無しさん
06/10/18 16:38:12
オフィシャルサイトに何が起こったんだろう。

135:デフォルトの名無しさん
06/10/18 16:58:41
SFのipが変わったせいで転送に失敗してるとさ
じきに直るでしょ

136:デフォルトの名無しさん
06/10/18 17:02:39
あと急ぎの用があるなら
URLリンク(boost.sourceforge.net)

137:デフォルトの名無しさん
06/10/18 17:37:55
おお、さんきゅー!

138:デフォルトの名無しさん
06/10/19 00:32:34
>>132
でふぉでそうだったっけ?そしたら遅くないか?

139:デフォルトの名無しさん
06/10/19 00:35:46
スピンロックかも

140:デフォルトの名無しさん
06/10/19 00:49:28
Win32だとInterlockedExchange()あたり使ってるんじゃなかったか。

141:デフォルトの名無しさん
06/10/19 01:43:59
>>138 つ boost/detail/sp_counted_base.hpp

142:デフォルトの名無しさん
06/10/19 03:24:06
>>133
VC8+boost1.35で試したらちゃんと動いたけど
使ってるコンパイラとboostのバージョンは?

143:133
06/10/19 09:30:48
>>133
>>142
VC2003 + boost 1.33.1
です
とりあえずboostのバージョンあげてきます

144:133
06/10/19 09:34:24
URLリンク(sourceforge.net)
boost1.35なんてないよ

145:デフォルトの名無しさん
06/10/19 11:14:37
>>144
CVSの最新版が1.35

146:デフォルトの名無しさん
06/10/19 11:36:49
>133
out = 2.236068
g++(mingw3.4.5)+boost1.33.1 でも問題ないようにみえます。

147:デフォルトの名無しさん
06/10/19 11:43:43
コンパイラか

148:デフォルトの名無しさん
06/10/19 11:46:32
>>133
VC8+boost1.33.1でもちゃんと動くね

149:デフォルトの名無しさん
06/10/19 16:25:42
>>133
VC2003で試したら落ちたのでアセンブリ出力を調べてみた。

function1<float, ublas::vector<float> > norm_2Functor = &ublas::norm_2<ublas::vector<float> >;

and eax,00402fd0 ; ここがおかしい。なんでANDやねん...(00402fd0はnorm_2のアドレス)
push eax ; VC8では2行あわせてpush 00402fd0だけになっている
lea ecx,dword ptr [ebp-3c]
call 00403040
mov byte ptr [ebp-04],01


で、norm_2Functorの宣言をこうしたらとりあえず動いた。
function1<float, ublas::vector<float> > norm_2Functor(&ublas::norm_2<ublas::vector<float> >);

push +00 ; この00は何なんだろう…
push 00402fd0
lea ecx,dword ptr [ebp-3c]
call 00403040
mov byte ptr [ebp-04],01

よくわからないpush 00がとても不安だけど…(VC8ではpushはひとつだけ)

150:デフォルトの名無しさん
06/10/20 21:04:32
VS2003ではfunction1を初期化
norm_2Functor(&ublas::norm_2<ublas::vector<float> >);
でしか呼べないのね。
objectの意味ねえ


151:デフォルトの名無しさん
06/10/20 21:49:33
>>150
function1<float, ublas::vector<float> > norm_2Functor(NULL);
で宣言しておいてswap技法
function1<float, ublas::vector<float> >(&ublas::norm_2<ublas::vector<float> >).swap(norm_2Functor);
で実際の関数を代入とか…

ヤッテランネ(ノ`□´)ノ⌒┻━┻

152:151
06/10/20 21:52:00
メンバ関数のswapがないから
swap(norm_2Functor, function1<float, ublas::vector<float> >(&ublas::norm_2<ublas::vector<float> >));
でないと無理か

そもそもできるかどうか知らんけど

153:デフォルトの名無しさん
06/10/20 22:03:06
腐ったコンパイラでなんとかしようという努力は不毛だぜ

154:デフォルトの名無しさん
06/10/20 22:38:40
>>152
そもそも一時オブジェクトをswapの引数にはできん

155:デフォルトの名無しさん
06/10/20 23:17:36
>>154
--->?swap技法?

156:デフォルトの名無しさん
06/10/21 00:24:57
中国人は帰れよ

157:デフォルトの名無しさん
06/10/21 00:43:07
>>155
意味不明

158:デフォルトの名無しさん
06/10/21 00:43:28
>>154
vectorが確保するメモリを要素数ぴったりに合わせるテクニックで
x.swap(std::vector<T>(x));
ってのがあったと思うけど、これもダメなの?

159:デフォルトの名無しさん
06/10/21 00:46:06
一時オブジェクトをswapの引数にするのは何も問題ない(ちゃんとしたコンパイラなら)

160:デフォルトの名無しさん
06/10/21 00:50:03
constでない参照引数に一時オブジェクトはダメじゃなかったっけ?

161:デフォルトの名無しさん
06/10/21 01:01:03
>>158
VC++2003で警告レベルを最高にするとwarningになるな。

162:デフォルトの名無しさん
06/10/21 01:27:59
23.1 Container requirementsによればa.swap(b)とswap(a,b)は同じで、
25.2.2 Swapによれば
template<class T> void swap(T& a, T& b);
1 Requires: Type T is Assignable.
とあるから、できないんじゃね?
と思ってx.swap(std::vector<T>(x));とやったらVC++2005でエラーになった。
と思ったらstd::vector<int>(x).swap(x);は通った。
何じゃこりゃ。

163:デフォルトの名無しさん
06/10/21 02:05:58
>>158
swap技法はstd::vector<T>(x).swap(x);じゃない?

164:デフォルトの名無しさん
06/10/21 07:43:54
>>162
template<class T> void swap(T& a, T& b);
はaもbも非const参照だから、一時オブジェクトを受け付けない。

std::vector<int>(x).swap(x);は、
std::vector<int>(x)が一時オブジェクトだが非constなので、非constなメンバ関数を呼べてしまう。

165:デフォルトの名無しさん
06/10/21 08:54:42
>>158
お前何にもわかってないのな

>>159
馬鹿確定

166:デフォルトの名無しさん
06/10/21 10:01:26
あ、一時オブジェクトに対して非constメンバを呼ぶのはいいのか。

167:デフォルトの名無しさん
06/10/21 21:13:06
int add(int a,int b){return a+b;} があるとして、
boost::function<int (int,int)> f = add; はコンパイルできるわけですが、

boost::function<boost::function<int,int> (int)> g = add; のようなことがしたい場合はどうし
たらよいでしょうか?addを、int->int->int ではなく int-> (int->int) として扱いたいというか。

gに、あとで(addの)第一引数を渡して、boost::function<int,int>型の関数オブジェクトを得て、
更にその後で(addの)第二引数を渡し、最終結果を得たいという感じです。

168:167
06/10/21 21:20:16
fをgに変換する方法でも結構です。
よろしくおながいします


169:デフォルトの名無しさん
06/10/21 21:44:22
>>167
どうしてもその変換をしないと駄目?
第一引数が既にあるならそれを部分適用することは簡単なんだが。

170:デフォルトの名無しさん
06/10/21 22:05:03
思った程大変じゃなかった。

# include <boost/function.hpp>
# include <boost/lambda/lambda.hpp>
# include <boost/lambda/bind.hpp>
# include <iostream>
# include <functional>

namespace lam = boost::lambda;

int main(void)
{
  typedef boost::function<int (int, int)> f_type;
  f_type f = std::plus<int>();
  boost::function<boost::function<int (int)> (int) >
    g = lam::bind(std::bind1st<f_type, int>, f, lam::_1);
  std::cout << g(7)(2) << '\n';
}

171:167
06/10/21 22:05:15
>>169
第一引数の部分適用が簡単なのは承知しているのですが…変換希望です。



172:167
06/10/21 22:23:29
>170
ありがとうございます。やってみます。


173:デフォルトの名無しさん
06/10/21 23:04:05
boost::bindでもいけるね

174:デフォルトの名無しさん
06/10/21 23:10:30
>>173
いってみてよ

175:デフォルトの名無しさん
06/10/22 01:05:59
template <typename A, typename B, typename C> int foo(A a, B b, C c) { return 0; }
template <typename A, typename B> int foo(A a, B b) { return 0; }
に対して、後者の関数をbindするつもりで
boost::bind(foo<int,int>, _1, 100);
すると、no matching function for call to ‘bind(<unresolved overloaded function type>, boost::arg<1>&, int)’
とか言われてしまうんだが、これって回避策ありますか?

gcc4.1です

176:デフォルトの名無しさん
06/10/22 01:12:24
>>175
boost::bind(static_cast<int (*)(int, int)>(foo), _1, 100)

177:デフォルトの名無しさん
06/10/22 12:38:25
>>175
class Void{}Void_v;
template<class T1, class T2, class T3=Void>struct select_f;
の特殊化を作ってfooの引数にVoid型があるなしで選択するとかは。

178:デフォルトの名無しさん
06/10/22 12:42:09
>>177
は?

179:デフォルトの名無しさん
06/10/22 12:43:22
>>177
175は関数テンプレートな訳だが..


180:177
06/10/22 13:30:36
>>179
えーと、あいまいな関数オーバーロードの解決にはキャストあたりが手っ取り早いと思うけど
そこで、
template <typename A, typename B, typename C>
int foo(A a, B b, C c) { return select_f<A, B, C>()(a, b, c); }// put away foo else
・・・
boost::bind(foo<int,int, Void>, _1, 100, Void_v);
こんな感じでキャストを使わない方法の案を提供したかったわけですよ。

181:デフォルトの名無しさん
06/10/22 13:39:27
キャストを使わないでそれを使うことに何の意味があるの?

あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?

182:177
06/10/22 13:55:49
>>181
キャストを使わない。
キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性をなくせる(たぶん)。

> あと、>177のように何の前置きにもなしに言って、理解してくれるエスパーだと思ったの?
タイピングの勢いだ。

183:デフォルトの名無しさん
06/10/22 14:28:28
> キャストを使ったときに起きるテンプレート関数の特殊化に対しての曖昧性
具体例が欲しいな


184:デフォルトの名無しさん
06/10/22 15:58:19
boost::lambdaのunlambdaとprotectがよくわからないんだぜ



185:デフォルトの名無しさん
06/10/22 16:38:15
>>183
たとえば、>175を
template <typename A, typename B> int foo(A a, B b); (b)
template<class A, class B>int foo(A*,B*); (c)
こんな(c)を追加して、(c)or(b)のどちらかをbindで使いたい場合
このオーバーロードの解決には結局、関数オブジェクトが手っ取り早いと思います。

186:デフォルトの名無しさん
06/10/22 17:13:50
>>185
それ、曖昧か?
後者は foo() についてポインタ型を扱う場合の特殊化を宣言しているので、
引数の型に応じて定義が使い分けられるだけじゃないの?

↓キャストでもコンパイルできたし。

int a, b;
(static_cast<int (*)(int*, int*)>(foo))(&a, &b);

187:185
06/10/22 17:59:14
>>186
boost::bindは?

188:デフォルトの名無しさん
06/10/22 18:02:01
>>187
boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
これぐらい自分で補完しろよ。

189:デフォルトの名無しさん
06/10/22 18:35:54
>>188
コンパイル出来るんだ。へぇー。

190:デフォルトの名無しさん
06/10/22 19:04:01
がんばって早く「ごめんなさい」の言える大人になろーね。

191:デフォルトの名無しさん
06/10/22 19:23:43
ごめんなさい

192:デフォルトの名無しさん
06/10/22 19:40:14
>>190
だって食い下がって逆撫でしていれば
>>188みたいな知識ひけらかし大好き君が無償で色々書いてくれるんだもん。
こういう子は利用しない手はないって。

193:デフォルトの名無しさん
06/10/22 19:57:34
>>192
普通に質問すればいいのに、なんでわざわざそんな手段をとる必要がある?

194:デフォルトの名無しさん
06/10/22 20:19:00
回答をもらえる確率が上がるから。

195:デフォルトの名無しさん
06/10/22 20:25:02
まぁ、スレを客観的に眺めると、知識ひけらかし大好き君は>177と分かるんだけどね。
>176で終わってる質問だし。

それに>188の知識は>176以上のものではないし。
散々引っ張っといて同じモノしか出ないんじゃ、割に合わない。

単純に悔しくなった>177君が利用してやった振りしてるだけ。

196:デフォルトの名無しさん
06/10/22 20:47:18
>>182 に「たぶん」って書いてあるのは、ただの妄想ってことでいいの?

197:189
06/10/22 23:35:55
>>188
ごめん。
だれもつっこんでくれないから寝る前に一言
> boost::bind(static_cast<int (*)(int*, int*)>(foo), _1, &b)(&a);
ちょっと言い訳・・・・「&a」参照の罠に嵌ってました。以上です。では、おやすみ。

198:デフォルトの名無しさん
06/10/25 18:14:32
std::map みたいに扱えて、実はバックエンドがデータベースだなんて
すてきな使い心地のライブラリって無いものでしょうか。


199:デフォルトの名無しさん
06/10/25 19:42:34
boost::graph

ASLの adobe::forest
が車輪の再発明ぽい点について

200:デフォルトの名無しさん
06/10/25 20:28:36
ASL かわいいよ ASL

201:デフォルトの名無しさん
06/10/25 23:26:50
あるあ…(ry >198

202:デフォルトの名無しさん
06/10/26 00:02:53
>>201 あるんですか?
なんて言うライブラリか教えて貰えませんか?
今、std::map を boost::serialization でディスクに書き出しているんですが、
かなりデータ量が大きくなってきて、すべてをオンメモリで処理するのが
苦しくなってきました。

203:デフォルトの名無しさん
06/10/26 03:11:33
AllegroCache. これ最強。

204:デフォルトの名無しさん
06/10/26 09:38:05
boostいいね。使っているとスルメみたいに味わい深いわ。
しかし古い設計で組んでいた俺の昔のコードは一体何だったんだと。 orz

205:デフォルトの名無しさん
06/10/26 11:07:28
STLぽい数式処理と数値計算のできるライブラリーってないでしょうか?
せめて多項式か2次式だけでもできると
少し数値計算プログラムが楽になる

206:デフォルトの名無しさん
06/10/26 15:38:08
ASLの
adobe::dictionary_t
はstd::mapよりたくさん要素あつかえるとかtutorialに書いてあった


207:デフォルトの名無しさん
06/10/26 16:19:02
>>198
Berkeley DBでも使え。

208:201
06/10/27 00:43:04
ねーよ


209:デフォルトの名無しさん
06/10/27 08:40:10
>>201>>208
馬鹿?


210:デフォルトの名無しさん
06/10/27 11:05:09
>>198
つlibstldb4

211:デフォルトの名無しさん
06/10/27 16:20:16
>>198
なぜ boost スレへ?

212:デフォルトの名無しさん
06/10/27 20:13:30
std::plus()はreturn a+b;ですが、return a+=b;してくれる関数オブジェクトは無いでしょうか?
手前で作ればいいのですが、boostにあるならそっちをつかいたく。

213:デフォルトの名無しさん
06/10/27 20:57:59
_1 += _2

214:デフォルトの名無しさん
06/10/27 21:06:44
>213
それはコンパイルできんだろ..

215:デフォルトの名無しさん
06/10/27 21:11:33
class MyPlus : public std::plus,
boost::addable< point<T>
, boost::subtractable< point<T>
>
{
MyPlus operator+=(const MyPlus&);
};

でいけたらいいな

216:デフォルトの名無しさん
06/10/27 21:16:44
>>214
using namespace boost::lambda;

217:デフォルトの名無しさん
06/10/27 21:23:35
std::accumulate は?

218:217
06/10/27 21:25:48
あ、関数オブジェクトじゃなかったorz

219:デフォルトの名無しさん
06/10/27 21:30:13
>>216 +=はオーバーロードされていないと思うが。

220:デフォルトの名無しさん
06/10/27 21:38:25
んなあほな。
複合代入演算子はクラスの外からでも多重定義できるのだから、
boost::lambdaで使えないわけが無い。

221:デフォルトの名無しさん
06/10/27 21:42:58
+=は使える。
クラス外から多重定義できるかどうかは関係ないような。

222:212
06/10/27 21:51:39
>>213
できました。ありがとう

223:デフォルトの名無しさん
06/10/27 21:52:36
そうか、_1なんかはそれ自身ラムダオブジェクトだったな。

224:デフォルトの名無しさん
06/10/27 23:28:35
>>219
死ねカス

225:デフォルトの名無しさん
06/10/30 18:40:49
話題が無いな

226:デフォルトの名無しさん
06/10/30 18:54:49
話題ねぇ…

URLリンク(opensource.adobe.com)

今レビューされている、Generic Image Library が通れば、
各種画像サポートが実現されるわけで、非常に期待してる。

227:デフォルトの名無しさん
06/10/30 20:09:51
ほお adobeがopensourceとは..

228:デフォルトの名無しさん
06/10/30 22:09:56
通ればってどういうこと?

229:デフォルトの名無しさん
06/10/30 22:14:22
URLリンク(lists.boost.org)

ちうこと。

230:デフォルトの名無しさん
06/10/30 22:29:06
adobe ASLで
URLリンク(japan.zdnet.com)
ユーザーインターフェイスの自動生成?
本当にできるの?

231:デフォルトの名無しさん
06/10/30 22:31:59
なぜvigraじゃなくてgilなんだ
機能の豊富さからいったらvigraが上だろう
URLリンク(kogs-www.informatik.uni-hamburg.de)


232:デフォルトの名無しさん
06/10/30 22:42:28
>>231
作者がboostに提案したか否かだろ

233:デフォルトの名無しさん
06/10/30 23:51:16
>>230
発表された頃に斜め読みした限りでは
プログラマとデザイナで仕事を分離するという程度の内容だったような?


234:デフォルトの名無しさん
06/10/31 01:39:42
>>232
どの記事だったか忘れたけど

>vigraのほうが好きだけど,vigraは作者が一人だし、gilが採択されたら
>その作者がんばるだろうからいいじゃん
とか書いてあった


235:234
06/10/31 01:41:27
>>234
URLリンク(lists.boost.org)
これこれ


236:デフォルトの名無しさん
06/10/31 03:07:04
やる気のない実装を見るとRejectされそうだけどな

237:デフォルトの名無しさん
06/10/31 12:11:48
URLリンク(lists.boost.org)
VC7.1でコンパイルとおらねえじゃねえかよ
同じとこでこけやがる

238:デフォルトの名無しさん
06/10/31 18:46:57
LinuxのGCCでワイド文字全般がうまく機能しないです。
gcc3.3.6
libstdc++3.3.6

boostでなんとかなりませんか?

wcout << L"てれれのレ";
[****@ **] (沈黙)


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5110日前に更新/175 KB
担当:undef