Boostを語れゴラァ part5

このエントリーをはてなブックマークに追加
1BOOTS
2デフォルトの名無しさん:2007/10/18(木) 08:10:02
■関連書籍■
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/

■関連スレ■
C++相談室 part58
http://pc11.2ch.net/test/read.cgi/tech/1190745673/

【C++】STL(Standard Template Library)相談室 7
http://pc11.2ch.net/test/read.cgi/tech/1185986999/
3デフォルトの名無しさん:2007/10/18(木) 08:10:07

Loki
http://sourceforge.net/projects/loki-lib/

JTC1/SC22/WG21 - The C++ Standards Committee
http://www.open-std.org/jtc1/sc22/wg21/

POCO, the C++ Portable Components
http://www.appinf.com/poco/info/
http://sourceforge.net/projects/poco/

The unofficial BCB Boost patches
http://bcbboost.sourceforge.net/
4デフォルトの名無しさん:2007/10/18(木) 12:31:01
>>1
5デフォルトの名無しさん:2007/10/18(木) 19:28:37
 ,、ヽl |l | l| l || l| l |   ビ ク ッ
ミ   お っ 立 も __ノ   _,.ヘ     _,,... -- ─--「::「 {i:.:.:`'、_/:.:.:.:.:.[/-...,,_   ソ ,'  い
Ξ   っ あ て っ )  /::7ヽ、ヘ,.-ァ'^ヽ∠ヽ,/L__`|:::|/}!.:.:.:.:r7=-:.:.:.:.!7::::::::::::`ヽ. ッ  i   け
ニ  立 ぁ な  も   !::::!´ア「>'‐''"´    `"'<LL_,'i>:'へ、:.:.:.:.:.:.r/::::::::::::::::::::::':., .|.  な
Ξ   て ん い う   /´\「>'"            ァ':::::::::::::::\__」}:::::::::::::::::::::::::::::ヽ.!  い
三  ち  ・  っ 糞  ,'  _」ア´  /  /!    !  /!   / ;'::::!:::::::';:::';::::::::ヽ::::::':;::::::::::::::、::::!  子
=    ゃ  ・  て ス   i 'ヽ!   / 7, 'イハ /! メ、,!__ハ, 'i::::::ト,::::::!::::i::::i:::::::':;:::::';:::::::::::::::ヽ;|  ね
三  ぁ  ら 約  レ   ', .,'  / /!,!-'、:レ' |/ァ' レ   ヽ!::!:::! ':;:::|ー!-ハ::::::::i:::::::!::::::::':;:::::::ヽ:
=  ら  め 束 は   !/  ;' ,ヘ!i. i,.ハ    、,_    !!::!:;ハ ヽ,jァr-;、!_ハ」:::::;':::::::::::::ヽ,::::::::;ゝ、.,__
ニ  め  っ  っ ・   ノへ,/レヘ, ! ゝ' ....::::::... '  ̄´゚o'レヘjソ :::.. 」_r!`> 7__/:::::i::::::::::::::
三   ぇ   ・   ・  ・   !  ノ; ./7''"///     /// !/.   !      '"'",':::::::!::::::i:::::::::::i   変
=   ぇ   も  ・  ・   ノ;  / ,'  ゝ、   ( ヽ  u (  ) ハ        !:::::;'::::::::':;::::::!.   態
三  ぇ  う   ・  あ  〈,へレ'〈ジi/ミ>.、..,,____  ,. イ   ( )`ヽ. ̄フ    !:::/i_;;::;;_:::::<   さ
≡,  ぇ  糞 は ぁ     i `:、レ'"´  !_r'"レ'/:::::::::>ァ、/|ヘ ヽ,__,..,.-''" ̄`ヽ、_ヽ:::':;!    ん
Ξ,   ぇ .ス  ぁ っ     ':,  `ヽ、 ,r;く:::::::!/::::::::::::/」;'  `ヽ. _>'"        Yヽ:::::!.   ?
 彡 !  レ  ん っ     ヽ、   ,.kヘ_!::::ム:::::::/]/ ,ァ-'‐''"´ ヽ!、_        〉:.!.  
6デフォルトの名無しさん:2007/10/19(金) 11:59:31
>>1
7デフォルトの名無しさん:2007/10/19(金) 20:36:20
>>5
8停止しますた:2007/10/24(水) 12:55:39
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
9デフォルトの名無しさん:2007/10/24(水) 12:56:17
?
10デフォルトの名無しさん:2007/10/26(金) 11:37:43
来たよ!
11停止しますた:2007/10/26(金) 11:38:17
偽・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
12デフォルトの名無しさん:2007/10/27(土) 03:28:33
12
13745:2007/10/27(土) 03:54:01
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#define BOOST_MEM_FN_ENABLE_STDCALL
#define BOOST_BIND_ENABLE_STDCALL
#include <boost/bind.hpp>

struct F
{
  int __stdcall f(int) { return 0; }
};

int main(void) {
  namespace bll = boost::lambda;
  F f;
  boost::bind( &F::f, &f, bll::_1 )(1);
  // bll::bind<int>( &F::f, &f, bll::_1 )(1); <- error!!
}

__stdcallの関数はboost::lambda::bindでは呼びだせないんでしょうか?
boost.usersで次のような古い記事を見付けたのですが
ttp://tinyurl.com/34cv9e
この通りに戻り値を明示的に指定しても無駄なようです
14デフォルトの名無しさん:2007/10/27(土) 06:25:20
boostにLokiのディスパッチャのような物はありますか?
15デフォルトの名無しさん:2007/10/27(土) 19:41:25
           _」, -─  .:. :. :. :.::::::::::::::::::::::::.:.`ヽ
          〈  ,.'"´ ̄      ̄`ヽ、.:::::::.:.:./
           V´ .::l:|:.  `、ヽミミヽ、  ヾ:./    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              / .::l::从ト、   `ヾ_ミミヽ、  ヽ  <  君さぁこんなスレッド立てるから
          l/l.:l.:リ仁リニトト、仁≧ミヽ:::ト、 .:::|    |  厨房って言われちゃうんだよ
           `Y::{fトッソ ``ト。ッソ` 1:l:|::`、:::::!    \______________
            |.::l´¨ 、  ´ ̄  /::リ::::::::V
             ヽ:ヽ、  ー     , タ::l:;:::::::/     , -‐─‐‐- 、
            , -─-、 __ , イ/.::j:|:::/l/  , ィ"´  ‐f ‐    \
           /.,    `トい、_,/^i.:l:|/  .//  ,  -──‐- 、`ヽ\
          /.:::/  .:i   {{i^Y^YYy'l/  〈 〃 ,ィ´  .:.:.:.:.::.:::::i::l:.\j ト、
          /.:.::::/  .:.::|   k1 |:l ,ム;、ハ、  V__/:::l/::::/:/.::::,イ.:::ハ!:l::::::.:V /  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        L.::::厂ヽ .:.:::::|  / {j! ーイ:介;l/ ,ハ /ハ!::/l:::/:/.::;ィイ/:::ハ:::|:::i.:.::{/ < おまえのことを必要としてる奴なんて
         {7 / \::::! /  jfl  |:1j! |:|{ Vi l:1ホ{:::l:i;:ィニー 、//-十1:,'.:.:,リ   | いないんだからさっさと回線切って首吊れ
       //   ,.イ:::l/  jf|  l;」jl j:」| |::H:|  {::l:iイヒリソヽ  イヒッソl/, イ/    \_________________
    /´ ̄    /::::|:;:;.\  kiL,  H  fj 〉; |:ト、_,{::ト.、_' ' '  '   ̄ / /i
    _>ーー-  ,.イヽ、::l;;;:;:;:;(:::/タ^Tニム、_ ,';{:/ |:|:::Y´「 ̄`ハ、 `´ , .イ _j/::|
   /。 ̄`¨`ヽ_ソ  `1>‐-ヽ{:::::/><!::::::7  |i::ノ {  /.::`K T.::::/ /.:::|
  ,/。     /      〉ニ三云\:.ヽ<ノ::::::」ヽ. Y  ,レ'´.::::::::::.〉ハコ``Y::.ヽ
 /     /       /¨´ ̄ ̄`ヽ、三三ミ<::::| | //.:::::::::::::::://´j}ト、 _」::::::|
16デフォルトの名無しさん:2007/10/27(土) 19:47:44
>>15
不覚にも噴いた
17デフォルトの名無しさん:2007/10/27(土) 22:54:09
>>14
boost::type
boost::bool_
boost::int_
boost::integral_c
あたりをどうぞ。これもFAQ気味だな。
18745:2007/10/27(土) 22:59:46
そういう用途ならboost vaultにdispatcherという名前からしてそのものズバリのがあります
これを適当にカスタマイズして使うのがよろしいんじゃないでしょうか?
1914:2007/10/28(日) 08:11:33
レスありがとうございます。

>>17
すみません説明不足でした。
多重ディスパッチによるマルチメソッドです。(Loki::BasicDispatcherとか)

>>18
boost vaultは初めて知りました。(よくみたらLet's Boostにもリンクはってありますね)
ソース見たところ、Lokiの物よりかなり機能が弱く感じます。
Lokiを使うのがいいのかもしれません。
20デフォルトの名無しさん:2007/10/28(日) 18:48:54
boost/type.hppって何に使うんでしょうか?
  // Just a simple "type envelope". Useful in various contexts, mostly to work
  // around some MSVC deficiencies.
ファイルには上記のように書いてありますがどういうこと?
21デフォルトの名無しさん:2007/10/28(日) 20:11:24
template<class T> T f();



f<int>();

と呼べない場合があるので

template<class T> T g(boost::type<T>);



g(boost::type<int>());

と呼ぶ
22デフォルトの名無しさん:2007/10/29(月) 14:56:29
>>20
ディスパッチのユーティリティとして使うとか。
boost/type_traits/detail/wrap.hpp とかもあるね。

template <class T> struct type {};

template <class T>
struct tester {
 template <class U> static char (&test(U*))[1];
 template <class U> static char (&test(type<U>*))[2];
 template <class U> static char (&test(...))[3];

 template <class U> static size_t f1(const U&) {
  return sizeof(test<T>(static_cast<U*>(0)));
 }
 template <class U> static size_t f2(const U&) {
  return sizeof(test<T>(static_cast<type<U>*>(0)));
 }
};

struct X {};
struct XX : X {};

tester<X>::f1(X()); // => 1
tester<X>::f1(XX()); // => 1

tester<X>::f2(X()); // => 2
tester<X>::f2(XX()); // => 3
23デフォルトの名無しさん:2007/10/30(火) 23:24:10
struct char_p_less : std::binary_function<const char*, const char*, bool>{
        bool operator()(const char* left, const char* right) const{
            return std::strcmp(left, right) < 0;
        }
}

typedef std::map<const char*, std::string, char_p_less> QueryMap;

これをLambdaを使って実現したいんですが、Lambda式で書いた結果は関数オブジェクトの値であって、型ではないので
typedef std::map<const char*, std::string, (bind(std::strcmp, _1, _2) < 0) > QueryMap;
このようなことが出来ないです。

typedef std::map<const char*, std::string, function2<bool, const char*, const char*> > QueryMap;
boost::function2<bool, const char*, const char*> compare = (bind(std::strcmp, _1, _2) < 0);
こうしてから使うときに
QueryMap foo(compare);
するしかないですか?
24デフォルトの名無しさん:2007/10/30(火) 23:28:50
いいえ、他の方法があります。

template<class T>
void use_query_map(const T&){
typedef std::map<const char*, std::string, T> QueryMap;
QueryMap foo;

// fooを使う
}

これで、この関数内では使い放題です。
25デフォルトの名無しさん:2007/10/30(火) 23:30:05
use_query_map(bind(std::strcmp, _1, _2) < 0);

を書くのを忘れていました。
26デフォルトの名無しさん:2007/11/02(金) 00:21:10
boost.testのBOOST_PARAM_TEST_CASEマクロの第一引数に
boost::function1のオブジェクトを指定することはできないんでしょうか?
>error C2660: 'boost::unit_test::make_test_case' : 関数に 4 個の引数を指定できません。
のような具合にどうにも通らないようです

#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <list>
void test_mask (int, int){}
struct sub_test_suite : public boost::unit_test::test_suite {
  sub_test_suite() : test_suite("sub_test_suite") {
    BOOST_PARAM_TEST_CASE(
      (boost::function1<void,int>(boost::bind(&test_mask, _1, 0x80)))
     , params.begin(), params.end());
  }
private:
  std::list<int> params;
};

using boost::unit_test::test_suite;

test_suite*
init_unit_test_suite( int, char* [] ) {
  test_suite* test = BOOST_TEST_SUITE( "Parameterized boost::function based test case" );
  // add test cases to test_suite
  test->add( new sub_test_suite );
  return test;
}

27デフォルトの名無しさん:2007/11/02(金) 07:55:35
boost::functionからboost::unit_test::callback1への変換が上手くいかないだけのようなので、
このように直接callback1のテンポラリを作って渡してやれば一応コンパイルはできました
boost::functionに対する依存も減りますし、この方法使ってればいいんでしょうかね…

#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/bind.hpp>
#include <list>
// user definition test function
void test_mask (int, int) {}
// user definition test class
std::list<int> params;

using boost::unit_test::test_suite;
test_suite* init_unit_test_suite(int, char* []) {
  test_suite* test = BOOST_TEST_SUITE("test");
  BOOST_PARAM_TEST_CASE(
    (boost::unit_test::callback1<int>(boost::bind(&test_mask, _1, 0x80)))
   , params.begin()
   , params.end()
  );
  return test;
}
28デフォルトの名無しさん:2007/11/07(水) 23:22:17
VC++7.1でboost1.33.1ですが
std::wstring sNumber = L"2007";
unsigned short wValue = boost::lexical_cast<unsigned short>(sNumber);
でbad_lexical_castが投げられてしまいます。
unsigned short以外の型では問題は無いのですが。
見あたらなかったのですが既知の問題ですか?
29デフォルトの名無しさん:2007/11/08(木) 00:28:59
コンパイルオプションの
wchar_t をビルトイン型として扱う (/Zc:wchar_t)
じゃない?
30デフォルトの名無しさん:2007/11/09(金) 12:53:53
emacs + gtags
でboostのコード閲覧がvisula studioみたいにできるけど
debugで変数の動きとか追いかけるのもemacsでVisualStudioみたいに
できる方法ないのかな
31デフォルトの名無しさん:2007/11/09(金) 13:20:49
32デフォルトの名無しさん:2007/11/09(金) 13:25:53
.NET Frameworkでvisual Studioの操作を外部プロセスから行う事が出来るから
それをEmacsから操作できるようにするってのがまぁ妥当な方法かも
ただし無駄に面倒だから恐らくやってる人は極少数
なんでVSにはコマンドラインデバッガが無いんだろうね…
33デフォルトの名無しさん:2007/11/09(金) 14:46:43
Visual Studio は統合開発環境で、ホスト・アプリケーションだから。
34デフォルトの名無しさん:2007/11/09(金) 16:27:52
むしろ Visual Studio にプロファイラがついていないことが疑問。
gprof みたいなやつって Windows だとなに?
35デフォルトの名無しさん:2007/11/09(金) 16:54:25
2005から、ガイド付き最適化(GPO)ができた

けど、使いにくいと個人的には思う
36デフォルトの名無しさん:2007/11/09(金) 17:04:00
悔しい、2003なら無料のdevpartnerが使えるのに…!!
3728:2007/11/09(金) 21:01:15
>>29
ありがとうございます、その通りでした。
もう一度、そこら辺のドキュメントがないか見てみます。。。
38デフォルトの名無しさん:2007/11/10(土) 12:01:39
以前のサイト移動しただけだったみたい
ttp://syrinx.q.t.u-tokyo.ac.jp/hashimoto/graph/
39デフォルトの名無しさん:2007/11/10(土) 17:07:41
>>34
>むしろ Visual Studio にプロファイラがついていないことが疑問。
Team Editionの一部にはついてるよ。
40デフォルトの名無しさん:2007/11/10(土) 17:25:43
VTune + プロファイラー が intel からでていますよね?
結局それ以外使い物にならないのでは?
41デフォルトの名無しさん:2007/11/10(土) 17:28:41
VTUNEはAMDのCPUでは使えないのだよ…
42デフォルトの名無しさん:2007/11/10(土) 18:24:14
CodeAnalystでいいじゃん
43デフォルトの名無しさん:2007/11/11(日) 18:05:23
bjam ver3.1.15-1経由でcl.exeのメッセージやワイド文字をコンソールに出力するアプリケーションでワイド文字を表示したら悉く???????と表示され、
いかにもロケール設定できてませんよって事態になります。
bjamを使わずに直接cl.exeやワイド文字を使うアプリを起動して表示すればちゃんと表示されのにも関わらずです。
以前のバージョンなら確かにcmd.exe以外のターミナルだろうが、cygwinのbashやzsh上だろうがNTemacsの中のシェルだろうが、
ちゃんと表示されてたんですが、皆様の環境ではどうでしょう?
4443:2007/11/11(日) 18:53:03
もろbjamの問題でした
適当なリビジョンのやつを落としてビルドしたバージョン3.1.14だとこの件に関しては正常に動作しました
45デフォルトの名無しさん:2007/11/13(火) 03:50:17
boost 1331ではboot.pythonでnumpy使えないないのかね
コンパイルは通るけど実行時にエラーでる
46デフォルトの名無しさん:2007/11/14(水) 02:02:53
最新のstableの1.34.1もしくはSVN Headで試してみればどうでしょうか?
47デフォルトの名無しさん:2007/11/14(水) 16:41:47
centosなのでpythonを2.4から2.5にあげるとシステムに不具合でるのです
どうやら
boost1.33.1 python2.4の組み合わせでしか動かないみたいです
48デフォルトの名無しさん:2007/11/21(水) 19:49:45
boost::formatの逆のような処理を行うライブラリはありますか?

try {
 unsigned short us = 0;
 int i = 0;

 (format("%1%, %2%") %us %i) = "0xABCD, -1234";

 BOOST_CHECK_EQUAL(0xABCD, us);
 BOOST_CHECK_EQUAL(-1234, i);
}
catch(const format_error& e) {
}
見たいな感じが理想です
49デフォルトの名無しさん:2007/11/21(水) 19:50:48
それは正規表現の仕事だな
強いて挙げるならregexとかxpressiveか
50デフォルトの名無しさん:2007/11/21(水) 19:52:29
>>48
要するにscanf()のboost版が欲しいわけだ
一言で言えば、無いよ
5148:2007/11/21(水) 20:07:58
了解しますた
xpressive->lexical_cast戦法でいきます
52デフォルトの名無しさん:2007/11/21(水) 20:10:20
なんでlexical_castなんぞ使うんだ?
53デフォルトの名無しさん:2007/11/21(水) 21:08:07
intとかに変換したいからでしょ?
悪かないと思うが。
54デフォルトの名無しさん:2007/11/21(水) 23:15:23
xpressiveを使うならそこはSemantic Actionだろ。
ちょうどいいサンプルもあることだし。
ttp://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/boost_xpressive/user_s_guide/semantic_actions_and_user_defined_assertions.html
5548:2007/11/22(木) 16:09:45
>>54
こんなのあったのかー すごい・・・
でもasのなかでも呼ばれてるlexical_castが16進数とかを良きに計らってくれなくて俺涙目w
56デフォルトの名無しさん:2007/11/22(木) 19:04:45
>>55
spirit と bind に触発されて昔作ったもの。
sprintf や sscanf みたいなことを spirit っぽく静的に記述する。

string strA, strB;
sprint( strA, "1 " % !_x[6] % "/" % _s, 10, "aaaa" );
sprint( strB, "2 " % (!_0x[6]) % "/" %_s, 10, "aaaa" );
cout << strA << endl; // 1 0xa/aaaa
cout << strB << endl; // 2 0x000a/aaaa

int xA, xB;
string yA, yB;
sscan( strA, "1 " % _ws % _x % "/" % _s, xA, yA );
sscan( strB, "2 " % _x % "/" % _s[3], xB, yB );

print( cout, "xA = " % _d % "\nyA = " % _s % _endl, xA, yA );
print( cout, "xB = " % _d % "\nyB = " % _s % _endl, xB, yB );

// xA = 10
// yA = aaaa
// xB = 10
// yB = aaa

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5317.zip

57デフォルトの名無しさん:2007/11/22(木) 23:37:26
notizキターw
58デフォルトの名無しさん:2007/11/22(木) 23:48:11
notizと聞くと某ゴーストとか火狐のテーマとかを思い出す俺は異端かな
59デフォルトの名無しさん:2007/11/22(木) 23:49:16
tupleをsinkやsourceにしてそれに対するfilterにしたらとても面白いかも・・・
でも今の僕にはその技術はありませんでしたというオチ
60デフォルトの名無しさん:2007/11/23(金) 14:17:00
MFCやCLIを基本として、BoostだのLokiだのSTLだのATLだのWTLだのを
覚えなきゃならないなんて、C++は大変だな。
おまけにXMLやるならXML用のライブラリ、SQLやるならSQL用のライブラリと
キリがない。
C++もういいよ。終了。
61デフォルトの名無しさん:2007/11/23(金) 14:19:41
>>60
頭おかしいのかお前。

例えば、何の言語を使えば
MLやるのにXML用のライブラリを覚えなくていいのか
SQLやるのにSQL用のライブラリを覚えなくていいのか言ってみろ。
62デフォルトの名無しさん:2007/11/23(金) 14:19:58
そうだね、プロテインだね。
63デフォルトの名無しさん:2007/11/23(金) 14:21:20
そこはだがそれがいいと返すべき
64デフォルトの名無しさん:2007/11/23(金) 14:23:27
全部言語仕様に入れたプログラミング言語作ろうぜ。
俺は見てるから。
65デフォルトの名無しさん:2007/11/23(金) 14:23:54
Java厨乙が適切だと思う。そういう俺はD言語厨。
66デフォルトの名無しさん:2007/11/23(金) 14:25:38
どんなにいいライブラリがあっても使いこなせない低脳さん乙と言ってあげるべき
67デフォルトの名無しさん:2007/11/23(金) 14:26:08
MFCが基本と言ってる時点で(ry
68デフォルトの名無しさん:2007/11/23(金) 14:29:11
大体基本って何だよ。
MFCはライブラリで、CLIは実行環境ジャン。
69デフォルトの名無しさん:2007/11/23(金) 14:48:17
最近プロテインをプロティン(どちらかというとプロチン)と発音しているCMを見たんだけどこれって正しい?
70デフォルトの名無しさん:2007/11/23(金) 14:48:25
俺は凡人だから、ちょっと頑張れば>>60が挙げたようなものは片っ端から使えるけど、
並外れて悪い頭を持って生まれてきた人には厳しいかもね。
71デフォルトの名無しさん:2007/11/23(金) 15:17:29
ここはいい釣堀ですね
72デフォルトの名無しさん:2007/11/23(金) 15:23:36
↑はいはーい、いつもの「カレ」のご登場でーす。パチパチ
73デフォルトの名無しさん:2007/11/23(金) 15:35:05
恥かいた時のために、いつでも釣り竿を用意してます

「あ、ヤバ!」と思った時、どれだけ自然に「さっきから竿を構えていた」かのように振る舞えるかがコツ
74デフォルトの名無しさん:2007/11/24(土) 03:07:55
>>73
後から釣りでしたって言った奴の負けだと思いますぅ〜♪
75デフォルトの名無しさん:2007/11/24(土) 04:46:35
相手して付き合ってしまってる時点で負けだろ
わざわざ同じレベルに堕ちる必要はあるまいて
76デフォルトの名無しさん:2007/11/24(土) 15:52:12
>>75
おまえもな
77デフォルトの名無しさん:2007/11/25(日) 17:16:34
おまえら、しょうがないなぁ

unit nYakuso = 7; //薬草1個の値段
unit nFukuro[10]; //持ち物を入れる袋
wstring strIppai(L"持ち物が\nいっぱいです><") ;

という文字列を以下のように変換するプログラムを30秒以内で記述できるか?

unit、nYakuso、=、7、;、unit、nFukuro、[、10、]、;、wstring、strIppai、
(、L、"、持ち物が\nいっぱいです><、"、)、;
78デフォルトの名無しさん:2007/11/25(日) 17:39:14
変数名の前に n とか str とか、自分は低脳ですって言ってるようなもんですよ
79デフォルトの名無しさん:2007/11/25(日) 17:43:33
こういうのはperlとか使った方がよさそう
80デフォルトの名無しさん:2007/11/25(日) 17:55:10
>>77
//以下の文字列を無視するのと
クォーテーション文字で囲まれた文字列内で
エスケープ文字を無視するのは標準Boostでは無理。
81デフォルトの名無しさん:2007/11/25(日) 18:02:10
spiritなら頑張れるかも
30秒以内は無理そうだが
xpressiveは知らない
82デフォルトの名無しさん:2007/11/25(日) 18:26:59
ノcomment_p( )
83デフォルトの名無しさん:2007/11/25(日) 19:04:27
>>82
だな
84デフォルトの名無しさん:2007/11/26(月) 05:43:59
30秒以内に記述してもコンパイルに30秒以上かかるんだよ・・・・
85デフォルトの名無しさん:2007/11/26(月) 14:51:55
boost.pythonでboostとpythonのバージョン違いに悩まされるより
swigの方がいいと思った
swigと比べたboost.pythonの利点って何?
86デフォルトの名無しさん:2007/11/26(月) 17:25:04
python コード呼び出すのがらくなことじゃねーの?
87デフォルトの名無しさん:2007/11/26(月) 18:27:45
cmathの関数群とbindについて教えてください。

double x = 25;
cout << bind(sqrt, _1)(x) << endl;

このコードは、VC++2005では実行できるのですが、
g++ 4.0.0 (boost 1.34) だと以下のように明示的に
キャストしないとコンパイルできません。

cout << bind(static_cast<double (*)double>(sqrt), _1)(x) << endl;

これはg++用boostライブラリ固有の制限なんでしょうか?
88デフォルトの名無しさん:2007/11/26(月) 18:44:44
std::cout << boost::bind<double>(&std::sqrt,_1)(x) << std::endl;
bindがオーバーロード解決に失敗するときは戻り値の型をテンプレート引数で明示的に指定してやればいいらしいです
89デフォルトの名無しさん:2007/11/26(月) 18:48:02
あごめん、やっぱ無理っぽい
90デフォルトの名無しさん:2007/11/26(月) 18:49:07
>>87
もしかしたら、VCにはcmathのfloat版関数の宣言がないのではないか?
91デフォルトの名無しさん:2007/11/26(月) 19:30:10
>>88
>>89
>>90
レスありがとうございます。
やはり複数の関数定義があるからなんでしょうかね。
実行はできるので、実装を受け入れることにします。
92デフォルトの名無しさん:2007/11/26(月) 22:39:40
template特殊化じゃなくて、overloadだとね。

template<typename _Tp> inline _Tp mysqrt(_Tp __x) { return sqrt(__x); }
なら、
cout << bind(mysqrt<double>, _1)(x) << endl;
できるけど。doubleで特殊化されてようとされてなかろうと。

93デフォルトの名無しさん:2007/11/27(火) 01:46:48
ただオーバーロードの名前解決ルールに従うとビッチリdoubleを
指定してるわけだからdouble sqrt(double)を特定できる
はずなんですけどね。コンパイルエラーにもambiguousとは出ていない
ようですし。
94デフォルトの名無しさん:2007/11/28(水) 23:07:10
>93
double を指定しているのは戻り値の型であって、sqrt() の引数の型には寄与してないから特定できないんじゃない?
x の型は bind の解釈には無関係だよね?
95デフォルトの名無しさん:2007/11/29(木) 00:58:51
>>94
_1 は確か引数じゃないかな?戻り値ではないと思ったけど。
96デフォルトの名無しさん:2007/11/29(木) 03:42:26
xpressiveを勉強しているのですがa|b(aまたはb)がうまく動きません

using namespace boost::xpressive;
sregex tok =
 as_xpr("hoge") >> (("!">>~before(eos)) | ("!!">>~before(eos)) | eos);

smatch m;
const std::string addr("hoge!hoge!!hoge!");
std::string::const_iterator it = addr.begin(), end = addr.end();
 
for( ; regex_search(it, end, m, tok, regex_constants::match_continuous)
   ; it = m[0].second )
{
 std::cout << m[0] << std::endl;
}
このコードで
hoge!
hoge!!
hoge!
と出力されると思ったのですが
hoge!
hoge!
で終わってしまいます
9796:2007/11/29(木) 03:46:41
申し訳ございません 間違えました
検証に使った文字列は
const std::string addr("hoge!hoge!!hoge");
です
98デフォルトの名無しさん:2007/11/29(木) 10:35:19
sregex tok =
 as_xpr("hoge") >> (("!!">>~before(eos)) | ("!">>~before(eos)) | eos);


だろ。普通は
99デフォルトの名無しさん:2007/11/29(木) 12:35:47
ファンクたを合成したいんだけど、
compose_f_gx_hx とかって Visual C++ 2005 の
STL には入ってないの? ファンクタの合成って
boost::compose か何かが必須?

なんか俺勘違いしてるのかな。
10099:2007/11/29(木) 12:38:12
あれ?Boost.Compose って deprecated ?
101デフォルトの名無しさん:2007/11/29(木) 12:40:01
lambda::bindを使って
bind(&f, bind(&g, _1))
な風に
でも>>13のように呼び出し規約が__stdcallの関数については使えないようだ
mlには使えるって書いてあるんだけどねぇ・・・誰か使えた人いないのかなぁ
10299:2007/11/29(木) 12:48:31
#include <boost/lambda/bind.hpp>
boost::lambda::bind

#include <boost/bind.hpp>
boost::bind

どちらを使うべきなのでしょうか?
103デフォルトの名無しさん:2007/11/29(木) 12:53:19
合成関数目的ならどっちでもいけるけど
__stdcallのものにでも使えるという点でboost::bindかな・・・
10499:2007/11/29(木) 12:56:54
THX.
ところで、ファンクタの合成って標準のSTLには入ってないよね?
SGIのだけに入ってるとか、そういうことあるのかな?
少なくとも Visual C++ だと compose_f_gx_hx などはありませんでした。
boost::bind のほうがもっと柔軟だから compose_f_gx_hx いらないけど。
105デフォルトの名無しさん:2007/11/29(木) 22:56:21
>104
標準化される前の SGI STL には compose1, compose2 があった。っていうか今もある。
現行の標準規格には入っていない。
compose_f_gx_hx は Boost.Compose での名前。
C++0x では Bind が標準に入るので今後は bind 使えになると思われ。
106デフォルトの名無しさん:2007/11/30(金) 02:01:44
Scott Meyers' Effective C++: TR1 Information
http://www.aristeia.com/EC3E/TR1_info_frames.html

266 tr1::bind Function Object Binders n1455
10799:2007/11/30(金) 15:00:08
_1 とか _2 って boost::lambda 名前空間以下にしかないよね?
boost::bind も併用しているんだけど、
そうすると ambiguous って言われる?
108デフォルトの名無しさん:2007/11/30(金) 15:12:46
言われる
10999:2007/11/30(金) 15:15:54
だは〜
無名名前空間の下に見えてる _1 はどっから来たものか・・・
#include <boost/bind.hpp> だろうなぁ。
::_1 って指定してやらないとダメみたい。
110デフォルトの名無しさん:2007/12/02(日) 18:50:17
Visual C++ 2008 Express Edition だとさらに
果敢に IntelliSense が攻めてくれるね.

だけどまた boost をリビルドしなきゃならんのか…
今からやろうと思うんだけど, svn trunk から
とってきたのを直接ビルドしてみようと思う.無謀?
111110:2007/12/02(日) 18:58:00
http://svn.boost.org/svn/boost/trunk/boost/config/auto_link.hpp

#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1500)
# define BOOST_LIB_TOOLSET "vc90"

ってことは,すでに trunk では対応しているのか.
退行テストも通ってるのかな.しかし svn から export
して持ってきたものをどうやってビルドするのかわからん・・
112110:2007/12/02(日) 19:24:56
bjam ビルド中。
あっさり toolset 名として vc9 が検出されたみたい。
つーか、bjam をビルドしようとして build_dist.bat を
実行したらすでに本体のビルドまで勝手にやってくれているのだが・・・
以前ビルドしたときとは大違いに楽になってる気がする。
113110のチラシの裏:2007/12/02(日) 19:31:29
ごめん、ウソ。いま改めて
bjam.exe --build-dir=builddir --toolset=msvc-vc9express stage
やってます。Express Edition は固有の toolset 名を持ってるのか?
もしかして 64 ビット版のライブラリをビルドするか否かを決定してる?
114110のチラシの裏:2007/12/02(日) 19:37:30
しかし Graph とか正規表現ライブラリの Unicode サポートとか
使おうと思ったら expat や icu4c も vc9 でビルドしなおさなきゃ
らんのかなぁ。

って、記憶をたどってみると、両ライブラリとも単独で使った
ことがあるんだけど、vc7 と vc8 で同じバイナリをリンクしてた
きがするのだが・・・ boost はなんでリビルドしなきゃならないの?

とはいえ、 vc8 用にビルドした boost を vc9 でビルドしてる
アプリケーションからリンクするとリンカが怒るので仕方ない。
115110のチラシの裏:2007/12/02(日) 19:59:26
Visual C++ 2008 Express Edition で 1.35 ビルド終了。
failed 2 って出たけど、どこで失敗したのかわからん。
bjam はログを残してくれないのか?
116デフォルトの名無しさん:2007/12/02(日) 20:10:38
(bjam ほにゃらら 2> err.txt) > log.txt
117110のチラシの裏:2007/12/02(日) 20:17:39
え、Windows の cmd.exe でも stderr のリダイレクトできたのか。
bash ばっかりだからしらんかった。
118110:2007/12/03(月) 00:12:14
bjam で --toolset=msvc-vc90 にしてるのに
libboost_graph-vc-mt-gd-1_35.lib
みたいにライブラリファイルの名前中のツールセット名が
-vc- になるのは、なぜ〜〜〜?

自分で変更するのタルい。
119デフォルトの名無しさん:2007/12/03(月) 00:34:06
Boost.BuildがV2になった直後はそんな話も出てたような
まぁperlかPowerShell使えばリネームなんて簡単だろ
120デフォルトの名無しさん:2007/12/03(月) 00:34:49
前に同じような減少に見舞われたときは
原因を調べるもの面倒だったからファイル名を一括置換した
なんでそうなるんだろうなあ
121110:2007/12/03(月) 05:34:34
>>119
まぁリネーム自体は簡単なんだろうけど,そもそも
ツールセット名ってどっかで正規化されていないのかと.
bjam で指定するツールセット名も msvc だけでも
受け入れられるし, msvc-vc8 や msvc-vc80 なども
変に柔軟に受け入れられるけど,オートリンクでは vc80
とか指定してくるし…

「自分でつけた名前だろ!自分でオートリンクできずにどうするよ!」
って突っ込みを入れたくなった.
122110:2007/12/03(月) 09:08:54
ツールセット名は msvc-8.0 と msvc-9.0 にすると
ちゃんと vc80 と vc90 って文字がライブラリのファイル名に含まれます。

msvc / msvc-vc80 / msvc-vc90 も受け入れられるけど、
そうするとライブラリのファイル名におけるツールセットの部分が
vc になってしまってオートリンクなどで都合が悪いです。
123110自分用メモ:2007/12/03(月) 09:41:13
V:\boost-vc8>bjam --builddir=builddir --build-type=complete
--toolset=msvc-8.0 stage

V:\boost-vc9>bjam --builddir=builddir --build-type=complete
--toolset=msvc-9.0 stage
124デフォルトの名無しさん:2007/12/05(水) 12:27:20
BOOST_STRONG_TYPEDEF マクロって,テンプレート版ないのかな?
typedef StrongTypedef<int> MyIntType;
みたいに使いたい.自分で勝手に上のような使い方をしてるけど,
標準があるならそちらに従いたい.

あと,BOOST_STRONG_TYPEDEF って totally_ordered しか
持っていないけど,もっと一般に additive とかそういうのを
持っているバージョンもあればいいと思う.

さらに serialization にも対応してたらいいなぁ.

#全部「おまえがやれ,自由に」と言われそうだけど
#標準が決まってるほうが可読性が上がると思う.
125デフォルトの名無しさん:2007/12/05(水) 14:12:06
>>124
> もっと一般に additive とかそういうのを
> 持っているバージョンもあればいいと思う.

具体的にはどういう型の時なの? additiveが有効なのは。

この辺は、 class NAME##_archetype { ってマクロでやってるから、
テンプレートに文字列処理がないとテンプレートだけでやるのは厳しいね。
126デフォルトの名無しさん:2007/12/05(水) 21:17:01
bjamでビルドするときコンパイラに追加で渡したいフラグを設定するにはどのようにすればよいですか?

warning C4996: 'std::XXX': Function call with parameters that may be unsafeとうるさいので
bjam --toolset=msvc-9.0express "--cxxflags=/wd4996" stage
としてみたのですがガンガンwarning C4996が報告されてしまいます

できればboost/config/user.hppとかをいじくらずbjamのオプションとかで渡したいです
127デフォルトの名無しさん:2007/12/05(水) 21:20:50
bjamのオプションもたぶんあるんだろうけど、
わかんなかったら環境変数CLを使えばよいんじゃないかな。
128126:2007/12/05(水) 21:45:28
わぉ 環境変数はずっとCFLAGSに設定してました
ありがとうございます
129デフォルトの名無しさん:2007/12/07(金) 07:57:36
scoped_ptr の実装を見て operator! が定義されているから
safe bool idiom にしようとおもって scoped_ptr を
継承した my_scoped_ptr を作ったら conversion が
ambiguous だって怒られた.
130デフォルトの名無しさん:2007/12/07(金) 10:07:16
class A : public B のようにクラスを継承しています。
B に非侵入型の serialize が定義されている場合には
A の serialize も非侵入型にしなくてはならないのでしょうか?
131130:2007/12/07(金) 11:04:41
すみません、自分の勘違いだったようです。
boost::serialization 関係でもうひとつですが,
BOOST_STRONG_TYPEDF で定義した型はそのまま
シリアライズできないのでしょうか?
自分で非侵入型の serialize を定義するべきですか?

http://boost.org/libs/serialization/doc/wrappers.html
ここを見ると BOSOT_STRONG_TYPEDEF(T,D) で作った型 D
をシリアライズする際には T に自動的に変換されるので
そのままでいい、ということのようですし、実際
BOOST_STRONG_TYPEDEF マクロの定義を見ても
そこで定義されている構造体には確かに変換が用意されているようなのですが
132デフォルトの名無しさん:2007/12/08(土) 12:44:00
Boost.Preprocessorで、BOOST_PP_CAT(t, Foo)が
tFoo でなく tWFoo と展開されたのだが・・・

t が他の文字ならおkで、また別のプロジェクトだと tFoo と正しく展開された。
ずっと解決できないので誰かご教授ください m(_ _)m
133デフォルトの名無しさん:2007/12/08(土) 13:06:20
>>132
tっていうマクロかtFooっていうマクロが定義されてるとか?
134デフォルトの名無しさん:2007/12/08(土) 21:19:07
boost::bindで拘束する変数はコピー可能なオブジェクトでないと駄目ですか?
135デフォルトの名無しさん:2007/12/08(土) 21:39:51
>>134 ref、cref
136デフォルトの名無しさん:2007/12/08(土) 21:43:20
>>135
ありがとう
137132:2007/12/09(日) 05:28:54
>>133
左手のトークンの末尾が 't' だと駄目なようです。
BOOST_PP_CAT(Get, Hoge) とか BOOST_PP_CAT(Object, Piyo) とか。
138デフォルトの名無しさん:2007/12/09(日) 08:20:28
>>137
それはもしかしてプリプロセッサのバグじゃないか?
使ってるプリプロセッサ何?
139132:2007/12/09(日) 08:59:35
>>138
VC++ Express 2005 です。
新規プロジェクト作り直して丸ごと移したら正常にコンパイル出来ました・・・
何か気持ち悪いけど、どこかプロジェクトの設定が壊れてたのだと思います。
お騒がせしました。
140132:2007/12/09(日) 09:49:06
と思ったらまた再発したorz 何だこれ
141デフォルトの名無しさん:2007/12/09(日) 10:28:26
2005でboost使うのは辞めてくれ。
stdとtr1だけにしとけ
142デフォルトの名無しさん:2007/12/09(日) 10:37:55
>>141
VC++7.1 は対応度高かったと思うけど 2005 だともしかして劣化してる?
2008 beta はどうなんだろ。
143デフォルトの名無しさん:2007/12/09(日) 11:51:47
初耳だな
144デフォルトの名無しさん:2007/12/09(日) 12:04:45
>>142
2008はもう正式版出ているw
145デフォルトの名無しさん:2007/12/09(日) 12:56:18
>>141
何の問題もないが.
時々 IntelliSense が黙るだけで.
VC9 ではかなり賢くなってる.
それでも boost::bind つかいまくりで
ファンクタ合成しまくりとかで黙ることもある.
146デフォルトの名無しさん:2007/12/09(日) 14:09:37
VC8だとuBLASにlambdaにfunctionにmplまで使ったらclがエラーで落ちたことがあったな。
SP1当てたら大丈夫になったけどさ。
147デフォルトの名無しさん:2007/12/10(月) 14:24:36
boost::shared_ptr の参照カウンタがゼロになったときに、
delete 以外の解放処理を行わせる方法はありますでしょうか。

extern IMalloc* allocator;
{
boost::shared_ptr<ITEMIDLIST> pidl((ITEMIDLIST*)allocator->Alloc(10));
}
//ここでallocator->Freeを呼ばせたい
148デフォルトの名無しさん:2007/12/10(月) 14:36:59
>>147
デリータを指定できるコンストラクタがあるよ。

template <typename U, typename D>
  shared_ptr( U* ptr, D deleter);

149147:2007/12/10(月) 15:08:43
おぉぉ、ありがとうございます。
解決しますた。
クラス全体のテンプレート引数 (1個しか無い) にしか目がいってなくて、
コンストラクタのところを見てなかったです。orz
150デフォルトの名無しさん:2007/12/11(火) 00:49:05
>>149
焦っている時にありがちな罠だから落ち着いて資料を読めばいいと思うよ。(自分への叱咤でもありorz)
151デフォルトの名無しさん:2007/12/11(火) 02:45:26
msvc+stlportの環境下で、Boost Build v2で、boostをインストールした人って
いませんか?

VC++8 + STLport-5.1.4 に boost-1.34.1 を入れようとして、
Boostビルドまでは何とかこぎ着けたのですが(コンパイルエラーなしで)、
いざ、boostを使ったプログラムをメイクしようとすると、

error LNK2019: 未解決の外部シンボル
"bool __cdecl boost::filesystem::native(class stlpd_std::basic_string<char,class stlpd_std::char_traits<char>,class stlpd_std::allocator<char> > const &)"
(?native@filesystem@boost@@YA_NABV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@@Z)
が関数 _main で参照されました。

なんていうリンクエラーが出てしまいます。
152デフォルトの名無しさん:2007/12/11(火) 03:53:33
ライブラリをリンクしろ。
153デフォルトの名無しさん:2007/12/11(火) 08:58:58
環境の判定に BOOST_PLATFORM マクロを使おうと
思ってるんだけど、プリプロセッサって
文字列の比較できないよね?
環境の判定によいアイディアあったら教えてプリーズ。
154151:2007/12/11(火) 09:54:39
>>152
[ツール]→[オプション]→[プロジェクトおよびソリューション]→[VC++ディレクトリ]で、
ライブラリファイルのディレクトリとして、
C:\Boost\lib
を追加済みです。

さらに、プロジェクトのプロパティページで、
[構成プロパティ]→[リンカ]→[入力]→[追加の依存ファイル]で、
boost_filesystem-vc80-mt-gdp-1_34_1.lib
を追加してみたのですが、ダメでした。(:_;)
155デフォルトの名無しさん:2007/12/11(火) 11:39:13
>>154=151
普通は「追加の依存ファイル」なんて設定しなくても
オートリンクで適切なライブラリをリンクしてくれるはずなんだけどなぁ。
って STLPort 使ってない俺が言っても意味ないよね。
156151:2007/12/11(火) 14:38:29
>>155
のはずなんだけど・・・。
v1のときは、普通にリンクできていたので。
なんというv2。

何も情報を出さないのはアレなんで、
ビルドフロー(失敗している奴)をここにまとめておきます。

Visual C++ 8.0 with SP1
STLport-5.1.4
 → C:\STLport-5.1.4 として解凍。
boost-1.34.1
 → C:\boost-1_34_1 として解凍。

OS: Microsoft Windows SP2
CPU: Intel
157151:2007/12/11(火) 14:39:01
■STLport

stlport/stl/config/user_config.h の
 #define _STLP_USE_BOOST_SUPPORT 1
を有効にする。

> "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
を実行。

環境変数に、
 STLP_BUILD_BOOST_PATH=C:\boost_1_34_1
を追加。

> cd build\lib
> configure -c msvc8 --use-boost=C:\boost_1_34_1
> nmake /fmsvc.mak install
でSTLPortをビルド。
158151:2007/12/11(火) 14:41:47
■boost

stlport.jamファイルの不具合を修正する。
 http://lists.boost.org/boost-build/2007/08/17123.php参照

user-config.jamファイルを編集する。
 using msvc : 8.0 ;
 using stlport : 5.1.4 : C:/STLport-5.1.4 ;

環境変数を設定する。vsvars32.bat
 @set STLPORT_PATH=C:\STLport-5.1.4
 @set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\S
 TLport-5.1.4\stlport;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\
 Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;C:\Program File
 s\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
 @set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;C:\STLport-
 5.1.4\lib;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\M
 icrosoft Visual Studio 8\VC\PlatformSDK\lib;C:\Program Files\Microsoft Visual
 Studio 8\SDK\v2.0\lib;%LIB%
(実際はそれぞれ1行です)

vsvars32-stlport.batにリネームして保存。

> "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32-stlport.bat"

ビルド。
> bjam --toolset=msvc stdlib=stlport --without-python install > build.log

build.logを見たら、
 ...updated 5631 targets...
でビルド成功。
159151:2007/12/11(火) 14:43:59
■試しに動かしてみる。

stlport、boostともインクルード・ライブラリそれぞれのディレクトリ
を追加。

int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
using namespace boost::filesystem;

boost::filesystem::path outputFilePath( "C:\\hogehoge.txt", native );
boost::filesystem::fstream outputFile( outputFilePath );

//string s;
//double d;
//s = "53.0";
//d = boost::lexical_cast< double >( s );

//cout << "Hello world" << endl;
//outputFile << "Hello world!" << endl;

return 0;
}

でビルド。

すると、>>151のようなエラー。

チラシの裏みたいでごめん。
160151:2007/12/11(火) 14:46:34
↑にあるコメント行はゴミです。すまん。削除するのを忘れた。。
ビルドの要らないboostライブラリは普通に動きます。lexical_castとか。
161デフォルトの名無しさん:2007/12/11(火) 22:52:53
multi_index_container.hpp なんてのがあるのか orz
俺の一週間の苦労はなんだったんだ……
お前ら、先に教えてくれよ……

λ....トボトボ
162デフォルトの名無しさん:2007/12/12(水) 01:01:52
>>161
どんまい。。。
163161:2007/12/12(水) 08:08:55
さすがにインデックス3つ使って複雑なコンテナ作ると,
Visual C++ 2008 でも IntelliSense が死ぬね.
でも補完機能は IntelliSense がぴか一だと思うんだけど,
それでも追い切れないとは…
164デフォルトの名無しさん:2007/12/12(水) 08:14:29
うーむ、2008はそんなにIntelliSenseがいいのか
2005Pro持ってるけどどうしようかなあ…
165161:2007/12/12(水) 08:46:11
>>164
俺も自前で頑張って買った 2005 Professional 使ってたけど,
今は 2008 Express Edition 使ってます.

VC++ スレでは IntelliSense 糞とかいう書き込みを見かけるけど
マクロとテンプレートでの変態プレイにここまで対応してるのは
2005 レベルでもすげぇとおもう.

単に自分が Eclipse の設定をちゃんとしてないからかもしれません.
標準ライブラリまで指定してフルインデックスすれば
Eclipse の CDT でもちゃんと型追っかけてくれるんでしょうかね.
166デフォルトの名無しさん:2007/12/12(水) 11:03:02
ええ。
けど使い慣れたのを使うのが一番だと思います。
ちとスレ違いだしね。
167デフォルトの名無しさん:2007/12/12(水) 15:35:23
2008ってExpress出てるのかよ
168デフォルトの名無しさん:2007/12/12(水) 16:22:35
英語版だろ
169デフォルトの名無しさん:2007/12/12(水) 16:32:16
英語版でもいいよ
170デフォルトの名無しさん:2007/12/12(水) 19:51:46
以下のように、可変個引数(モドキ)をとる関数をtupleを使って作りたかったんですが、
行き詰まりました。関数内でtuple要素全てにアクセスする方法はありますか?
可変個引数が可能ならばtupleじゃなくても構いません。ちなみに、引数の型はすべて一緒です。

template<typename T>
void multi_args(const T& arg){

   for(int i = 0 ;i< tuples::length<T>::value ;++i){

     //tuple要素すべてにアクセスしたい
    //arg.get<i>() は当然だめ
   }

}

int main(){

   multi_args( make_tuple(1,2,3) );

   return 0;
}
171デフォルトの名無しさん:2007/12/12(水) 20:23:21
>>170
素朴な疑問なんだが、std::vectorじゃいけない特別な理由でも?
# まぁ、vectorだと即値を列挙することはできないわけだが。
172デフォルトの名無しさん:2007/12/12(水) 23:19:47
>>170
boost::fusionならfor_eachができるんだが
ループ内で全要素にアクセスってのは無理だな。
173デフォルトの名無しさん:2007/12/13(木) 08:02:53
boost fusion について日本語で解説したページってある?
174デフォルトの名無しさん:2007/12/13(木) 14:14:22
NiceBoost
175デフォルトの名無しさん:2007/12/13(木) 20:19:04
>>170
boost::assign::list_of
176デフォルトの名無しさん:2007/12/13(木) 23:31:39
>>170
tuple って単に car が get_head で、cdr が get_tail なので、
 tuple_for_each(t, f) { f(t.get_head()); tuple_for_each(t.get_tail(), f); }
tuple_for_each(null_type, f) {}
とかを作ってしまえばいい

で、なぜか iterator/zip_iterator.hpp の detail 内にあったりするわけだが
177デフォルトの名無しさん:2007/12/14(金) 07:11:53
boost::multi_index_container で
boost::multi_index_container::tag
を使うと Visual C++ 2008 ではエラーになる.
C1001 なので原因がよくわからない.
178デフォルトの名無しさん:2007/12/14(金) 10:41:48
bindとlanbdaを同時に使うとき
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>
using namespace boost;
using namespace boost::lambda;
とすると、_1 を使ったときコンパイルできなくなる。
boost::lambda::_1 なんてやるとコンパイルできる。
プレースホルダー _1 ってbind.hppでもlambda.hppでも
重複して定義されてる?
179デフォルトの名無しさん:2007/12/14(金) 10:46:27
俺、ファンクタの合成くらいにしか使わないので、
結局 boost::bind だけしか使わないようにした。
って、それじゃ根本的な解決になってないか。
180デフォルトの名無しさん:2007/12/14(金) 12:10:44
>>178
その通り
usingの代わりにnamespaceの短縮名を使うと良いと思う
181デフォルトの名無しさん:2007/12/14(金) 12:32:47
>>180
ありがとう。
で、namespaceの短縮名とは何ですか?
boost::lambda::_1のように常に明示的に
指定するということですか?
182デフォルトの名無しさん:2007/12/14(金) 12:35:49
>>181 namespace bl = boost::lambda;
183デフォルトの名無しさん:2007/12/14(金) 13:33:53
>>182
ありがとう。
別名を与えられることは知りませんでした。
これで対応していきます。
184デフォルトの名無しさん:2007/12/14(金) 15:48:19
bjamのv2の使い方が良く分からないんですが、例えば以下をv2で
書く場合、どのように書いたら良いんでしょうか?
#bjam -sTOOLS=mingw "-sBUILD=release <runtime-link>static <threading>multi <native-wchar_t>on" --prefix=/c/msys/1.0/local install
185デフォルトの名無しさん:2007/12/14(金) 17:59:08
libcgi とか libcgi++ とか libcurl の asio 利用版
なんてのもでてくるのかね?
186デフォルトの名無しさん:2007/12/14(金) 19:14:30
sregex r = sregex::compile( "A([1-9]*|[a-z]*)A" );
string str1 = "A123A AaaaA A3b3A A9A";

if( regex_search( str1, m, r ) )
{
...
}

で、
"123"
"aaa"
"3b3"
"9"
という文字列を取り出すにはどういう記述をすればいいでしょうか?
m[2].str() とか書いても、aaaとか取得できないんです。

sregexでなくxpressive利用でもいいです。

187デフォルトの名無しさん:2007/12/14(金) 19:35:19
const_iterator begin()const;
Effects: Returns a starting iterator that enumerates over all the marked sub-expression matches stored in *this.

const_iterator end()const;
Effects: Returns a terminating iterator that enumerates over all the marked sub-expression matches stored in *this.
188デフォルトの名無しさん:2007/12/14(金) 19:35:19
regex_searchじゃなくてregrex_iteratorでも使っとけ
189デフォルトの名無しさん:2007/12/16(日) 00:40:01
regex_searchで
最小マッチ?を指定するとダイアログ出て落ちるんです
190デフォルトの名無しさん:2007/12/16(日) 01:46:33
エスパー魔美
191デフォルトの名無しさん:2007/12/16(日) 20:10:54
http://pastebin.windy.cx/?page=view&id=1197803292
boost::serialization::base_object を経由せずに
(Base&) で型変換してシリアライズするのはダメ?
一応読み込むこともできているようなんだけど.

ちなみに (Base) で型変換するとスライシングのせいか
読み込んだ時に正しく読み込むことができません.
192デフォルトの名無しさん:2007/12/16(日) 20:37:23
Resist the temptation to just cast *this to the base class.
This might seem to work but may fail to invoke code necessary
for proper serialization.

マニュアルにはこう書かれているけど,かといって private で
継承した基底クラスをシリアライズするためには >>191
みたいにしないとだめだよねぇ?
193デフォルトの名無しさん:2007/12/17(月) 10:40:42
http://www.boost.org/libs/serialization/example/demo_shared_ptr.cpp
ここには基底クラス A の shared_ptr に派生クラス B のポインタを
持たせてシリアライズしています。なお、 A は仮想デストラクタを
持っています。このとき

boost::archive::text_oarchive oa(ofs);
oa.register_type(static_cast<B *>(NULL));
oa.register_type(
static_cast<
boost::detail::sp_counted_base_impl<
B *, boost::checked_deleter<B>
> *

のように register_type しなければならないようなのですが、
BOOST_CLASS_EXPORT マクロのようなもので登録できない
ものでしょうか? archive を生成してから毎回登録するのは
忘れてしまいがちなので。
194193:2007/12/17(月) 11:14:31
というか、register_type で何を登録すればいいのかがわからん。
http://archives.free.net.ph/message/20071129.235833.ba9e02a9.en.html
でまさしく同じ問題についてQ&Aがあるんだけど、
結局上の URL の例をみろってことだけなんだよなぁ。
195193:2007/12/17(月) 11:24:03
http://pastebin.windy.cx/?page=view&id=1197858127
どうやらこれだけでいいみたい。
でも文字化けしてしまった…

#そのうち他言語対応しておきます。
196193:2007/12/17(月) 11:25:44
他言語→多言語 orz
しかも sage てなかった orz-----3
197デフォルトの名無しさん:2007/12/17(月) 16:56:24
Boost と POCO ってなかよしなの?
asio とか filesystem とかかぶってるみたいだけど.
198デフォルトの名無しさん:2007/12/18(火) 13:34:06
VS 2008 EE 日本語版
199デフォルトの名無しさん:2007/12/18(火) 18:06:51
class B{
public:
 virtual void mf();
};

class D : public B
{
public:
 void mf();
};
のように継承関係にあるクラスについて
shared_ptrはポリモルフィックに動作しますか?

つまり、
shared_ptr<B> bp(new D);
bp->mf() で D::mf() が呼ばれることはboostの仕様として
保障されてますか?
200デフォルトの名無しさん:2007/12/18(火) 18:09:44
はい
201デフォルトの名無しさん:2007/12/18(火) 18:12:42
thx
202デフォルトの名無しさん:2007/12/21(金) 00:25:47
#include "stdafx.h"
#include <iostream>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/if.hpp>
#include <vector>
#include <algorithm>
using namespace std;
namespace bl = boost::lambda;

int main()
{
unsigned int a[] = {0, 1, 1, 0, 1, 0, 0, 1};

for_each(a, a + sizeof(a)/sizeof(a[0]),
bl::if_(bl::_1 % 2 == 0) [cout << "偶数\n"].else_[ cout << "奇数\n"] );

}

これをコンパイルすると

private メンバ (クラス 'std::basic_ios<_Elem,_Traits>'
で宣言されている) にアクセスできません。

とエラーが出てコンパイルできません。原因は何でしょうか?
VC++ 2008 コンソールアプリケーションです。
203202:2007/12/21(金) 00:44:29
自己解決しました。
204デフォルトの名無しさん:2007/12/21(金) 00:54:37
わざわざ通知ありがとうございました。
205デフォルトの名無しさん:2007/12/21(金) 12:42:34
boost::bind(&ClassA::MethodB, this, _1)

みたいなファンクタを生成するとき,ClassA に MethodB
が複数 (void MethodB(int) と void MethodB(double)とか)
定義されていたら,どちらのメンバ関数ポインタになるんでしょうか?
206デフォルトの名無しさん:2007/12/21(金) 12:57:01
内輪で使うために作ったWindows版のバイナリパッケージを晒します.
ビルド環境
Visual Studio 2005 Professional SP1 日本語版
Visual C++ 2008 Express Edition 英語版

vc8 と vc9 でビルドするスクリプト
http://svn.windy.cx/websvn/listing.php?repname=Building.boost-trunk&path=%2F&sc=0

trunk の Windows 用インストーラつきバイナリパッケージ
C:\Program Files\boost\boost_1.35_20071202 以下に展開されます
アンインストールはディレクトリごと削除するだけ

ヘッダ(共通)
http://svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-header.exe
vc8用スタティック
http://svn.windy.cx/pub/boost_1_35_20071202-vc8.exe
vc8用DLL
http://svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc8-dll.exe
vc9用スタティック
http://svn.windy.cx/pub/boost_1_35_20071202-vc9.exe
vc9用DLL
http://svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc9-dll.exe

自分はスタティックライブラリしか使わないのでDLL版の動作は未検証.
GMP, MPFR, MPFR++ などのバイナリパッケージも.
http://svn.windy.cx/
207205:2007/12/21(金) 13:06:06
パッケージは exe だけど,実体は自己展開 cab なので
拡張子を cab に変えればたいていのアーカイバで開けます.
あと,ランタイムに関してですが /MD と /MDd です.
208206:2007/12/21(金) 13:06:56
名前欄間違えた.
209デフォルトの名無しさん:2007/12/21(金) 18:17:17
>>205
static_cast<void (ClassA::*)(int)>(&ClassA::MethodB)
みたいに明示的にキャストしないと通らないと思った。
210デフォルトの名無しさん:2007/12/21(金) 19:11:54
>>209
               ∩
               ( ⌒)     ∩_ _
              /,. ノ     i .,,E)
             ./ /"    / /" .
   _n  グッジョブ!! ./ /_、_   / ノ'    
  ( l    _、_   / / ,_ノ` )/ /_、_    グッジョブ!!
   \ \ ( <_,` )(       /( ,_ノ` )      n
     ヽ___ ̄ ̄ ノ ヽ     |  ̄     \    ( E)
       /    /   \   ヽフ    / ヽ ヽ_//

VC9用をいただきました
211210:2007/12/21(金) 19:13:04
間違えた
>>209 ×
>>206 ○
212デフォルトの名無しさん:2007/12/23(日) 16:13:54
正規表現で調べる文字列にcharやwchar_tの配列は使用できないのでしょうか
213デフォルトの名無しさん:2007/12/23(日) 17:06:19
>>212
char*やイテレータを取るバージョンがあるはずだが
214デフォルトの名無しさん:2007/12/23(日) 18:15:20
>>213
以前のバージョンということですか?
できればxpressiveで書きたいので、最近のバージョンを使いたいのですが
それでは無理ってことでしょうか
215デフォルトの名無しさん:2007/12/23(日) 18:34:45
バージョンと言うかオーバーロードな
と言うかリファレンス見たら?
216デフォルトの名無しさん:2007/12/23(日) 22:54:20
>>215
つ 特殊化
217デフォルトの名無しさん:2007/12/23(日) 23:22:28
つか入力にイテレータ取るバージョンがあれば当然ポインタ食わせられるだろ。
218デフォルトの名無しさん:2007/12/23(日) 23:55:17
sregexがstd::string版なら、cregexがconst char*版。
Xpressiveでは、イテレータの型をテンプレート引数で指定する。
http://boost.org/doc/html/xpressive/reference.html#header.boost.xpressive.xpressive_fwd.hpp
219デフォルトの名無しさん:2007/12/24(月) 08:12:02
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(),
boost::bind(operator<<, std::cout, _1));

このようにして各要素を出力することはできないのでしょうか?
なぜだか error C2065: '<<' : undeclared identifier
と言われてコンパイルできません.
220219:2007/12/24(月) 08:54:23
boost::bind に関するこのコードでなぜ最後のコメント部分の
コンパイルが通らないのでしょうか?
http://pastebin.windy.cx/?page=view&id=1198454028
221デフォルトの名無しさん:2007/12/24(月) 09:25:58
コンパイルできない理由はちょっとわからんけど、これじゃダメなん?
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));
222デフォルトの名無しさん:2007/12/24(月) 09:38:51
>>220
g++だと<unresolved overloaded function type>と言われたのでstatic_castしたら通った。
std::for_each(v.begin(), v.end(), boost::bind(
    static_cast<A &(A::*)(int)>(&A::operator =),
    &a,
    _1));
223デフォルトの名無しさん:2007/12/24(月) 09:43:23
>>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、
そのコードでは、正しいoperator <<へ辿り着けない。
もっとも、それ以前の問題でコンパイルエラーになっているようだが。

今回は221のいうとおりostream_iteratorもあるし、
その他演算子一般の場合は、bind使えなくてもlambdaがある。
224219:2007/12/24(月) 09:48:19
>>221
いや,もちろんそれでやりたいこととしてはOKなんですが,
一般的な演算子を指定できれば応用範囲も広がるかなと思って.

>>222
VC9 だとテンプレートを検索しまくって
「あれでもない,これでもない」と C2780 を連発した揚句,
時々 ambiguous だというエラーも出るんですよ.

なるほど, g++ でもそのままでは通らなくて,
static_cast すれば通るんですね. operator() だと問題なくて
operator= だと問題になる理由がわからないですが.
既定の代入演算子が別途用意されてしまうからかなぁ.
自前で = をオーバーロードした時って既定の = は
定義されないんでしたっけ?

でも独自にコンストラクタを作ってもコピーコンストラクタは
勝手に作られていたような気がする.
225219:2007/12/24(月) 09:51:05
>>223
なるほど,それで operator<< が見つからないと怒られてるんですね.
たぶんグローバル名前空間の operator<< を探しに行って「無い」
と怒ってるように思います.

自分はてっきりストリームの << 演算子はグローバル名前空間に
定義されていて必要なクラスに friend 指定されているのだと
思っていました.
226デフォルトの名無しさん:2007/12/24(月) 11:35:14
>>224
boost::bindはlambdaと違って一旦メンバーポインタにするから。
だからoverloadされてるとまずい。
227デフォルトの名無しさん:2007/12/24(月) 13:22:18
--------------------------------------------------------
以下抜粋
bool A::foo(int) const;
A a;
vector<int> ints;
...
find_if(ints.begin(), ints.end(), bind(&A::foo, a, _1));
find_if(ints.begin(), ints.end(), bind(&A::foo, &a, _1));
---------------------------------------------------------

この形式でboost::lambda:bindを使う場合、非constメンバー関数を
指定するとコンパイルが失敗するのですが、constメンバー
関数しか渡せないという仕様なのでしょうか?

試したのはVC++ 2008です。以下がエラー内容です。
error C2665: 'boost::lambda::function_adaptor<Func>::apply' : 2
オーバーロードのどれも、すべての引数の型を変換できませんでした
228219:2007/12/24(月) 14:12:29
>>227
find_if(ints.begin(), ints.end(), bind(&A::foo, &a, _1));
で,a が const じゃないからじゃね?
間違ってたらごめんne
229デフォルトの名無しさん:2007/12/24(月) 14:12:53
うぉ,名前付けてしもうた.
230デフォルトの名無しさん:2007/12/24(月) 16:45:33
>>228
find_if(ints.begin(), ints.end(), bind(&A::foo, a, _1));
参照渡しのこちらの形式で制限があることが記載されていました。
aはconstオブジェクトとしてファンクタに保持されるらしいので
constメンバー関数しか呼べないみたいです。回避策として
ref(a)を渡せばよいらしく、これでうまくいきました。

ポインタ形式のほうはポインタのコピーなので問題ありません。
find_if(ints.begin(), ints.end(), bind(&A::foo, &a, _1));
231デフォルトの名無しさん:2007/12/24(月) 21:32:02
boost::tuples::tuple<T1,T2,...> を投入して,
T1 をキーとして扱ってくれる map ってないものでしょうか?
std::for_each で処理する時,std::pair<Key, Value> の
インスタンスが順にファンクタに渡されますが,
そうではなくて Value だけを次々と渡してほしいので,
boost::tuples::get<1> などで値が取り出せる tuples が
便利なのですが・・・

boost::multi_index がそれに該当するのでしょうか?
232デフォルトの名無しさん:2007/12/24(月) 21:35:57
T1部分だけで比較する関数オブジェクトを持たせたsetはどうだろう?
233デフォルトの名無しさん:2007/12/25(火) 19:03:30
struct A {

 template <typename Args>
  struct sig
  {
   //typedef ??? type;
  };

  int operator()(int x) const;

  void operator()(int x, int y) const;

};

lambda式で使うファンクタの定義で、上のように引数の数が違い、
かつ戻り値の型も違う複数の関数呼び出し演算子を定義したい場合、
sigでどのようにtypeを表現したらいいのでしょうか?
234デフォルトの名無しさん:2007/12/25(火) 19:08:48
boost::iostreams使ってるんだけど、

struct my_device {
 typedef char char_type;
 struct category : bidirectional_device_tag, closable_tag {};

 std::streamsize read( char_type *s, std::streamsize n ) {}
 std::streamsize write( const char_type *s, std::streamsize n ) {}
 void close( std::ios::openmode which = std::ios::in | std::ios::out ) {}
};

int main() {
 my_device dev;
 stream<my_device> ss( dev );

 ss.get();
 char ch;
 ss >> ch;
}

このとき、get()してるはずなのに、my_device::read()の引数nの値が
4096になっているのはなぜ??n=1で呼ばれて欲しいんだが。
operator >> を使った場合も同じくn=4096。

4096ってのは、バッファのサイズか何かだとは思うんだが・・・。
ソース見てもテンプレート使いまくりで、どこで呼び出してるのかさっぱりわからん。。。

誰かわかる人いる?
ちなみに環境はWinXP + VC8です。
235デフォルトの名無しさん:2007/12/25(火) 19:31:39
stream<my_device> ss( dev, 1 );

see also
ttp://www.boost.org/libs/iostreams/doc/index.html
236デフォルトの名無しさん:2007/12/25(火) 19:45:19
>>235
回答ありがとうございます。
バッファのサイズを1にするだけだと、上のコードは通りますが、

ss.read( buf, sizeof( buf ) );

みたいな使い方をするときに効率が悪い気がするんですが。
ほかにいい方法ありませんか?
237デフォルトの名無しさん:2007/12/25(火) 20:04:33
>>233
Argsを調べて適当にディスパッチしてやれば良い。例えば引数の数で分けるなら、
template <typename Args>
struct sig
{
  typedef typename boost::mpl::if_c<
    boost::tuples::length<Args>::value == 2, /* 関数オブジェクトと引数一つで合計2 */
    int,
    void>::type type;
};

試してないけど、typename Args::inheritedでconsリストを得て、
それに対して部分特殊化でパターンマッチすることもできるはず。
238デフォルトの名無しさん:2007/12/25(火) 20:24:53
>>236
my_device::readの引数nが4096でも戻り値で1を返しとけばいいんじゃないかな?

でもmy_device::readが一度に1しか読めない仕様(234より)だから
ss.read( buf, sizeof( buf ) )ってやるとsizeof(buf)回呼び出されて効率悪いけど・・・
239デフォルトの名無しさん:2007/12/25(火) 20:39:55
>>236
多分大丈夫だと思うんだけどmy_device::readの引数nがインデックスではないよ。サイズだよ?

例えばn==4096の時
  4096番目からreadしてsに入れろ
でなく
  わたくしめの方で確保させていただきましたsのサイズは4096です。
  4096ぴっちり埋めて頂かなくても結構ですが埋めて頂きましたサイズを戻り値としてお返しください
だよ?

インデックス指定はseekで行われるよ

see also
ttp://www.boost.org/libs/iostreams/doc/tutorial/container_device.html
240デフォルトの名無しさん:2007/12/25(火) 21:25:59
>>238-239
ありがとうございます。
my_device::read()の引数nがインデックスではないのは理解しているつもりです。

作っているmy_deviceがrs232cの通信インターフェースなので、
stream<my_device> ss;
ss.get();
のときに、タイムアウトするまで制御が戻ってこないと不都合があったのです。
※1文字受信していても、n==4096なので、ReadFileしたときに制御が戻ってこない

なので、
ss.read( buf, sizeof( buf ) );
のときにはsizeof( buf )分だけ、
ss.get()
のときには1文字分だけ読み込む処理がしたかったのです。

iostream拡張は今までやったことがなく、stream_bufのバッファリングの仕組みは
まだよくわかっていなのですが、仕様っぽい気がしてきました。

他の方法で解決できないか試してみます。
241デフォルトの名無しさん:2007/12/25(火) 21:58:08
>>237
レスありがとうございます。
mplやconsリストというのを未だ知らないので
まずはこれを調べて見ます。
242234:2007/12/26(水) 00:00:09
自己解決しました。
my_device::read()内で、受信バッファのデータ数を調べ、
その分だけReadFileすることで解決しました。

>>235, >>238-239
助言ありがとうございました。
243デフォルトの名無しさん:2007/12/26(水) 00:01:29
struct A {

 template <typename Args>
  struct sig
  {
    typedef ?? type;   
  };

  int operator()(int x) const;
  double operator()(double) const;
  void operator()(int x, int y) const;

};

上のようなファンクタの場合、型の違いによって、
typeを振り分けるにはcons listから型を抽出して
is_same<>で型を判定するという方法で可能でしょうか?
sigの部分的特殊化の方法か何かで
Args::inherited が cons<A, double>
を表すように仕組んで、
boost::tuples::element<1, Args>::type
とcons<A, double>のdoubleの比較一致を
試すというようなことができれば実現できるのかなと
思っているのですが。
244デフォルトの名無しさん:2007/12/26(水) 05:38:45
>>243
ごめん、上でArgs::inheritedとか書いたけど無視してくれ
Argsがタプルならこの方法でconsリストを取り出せるけど、Argsとして渡されるのは最初からconsリストだった。

で、そのファンクタの場合も、boost::tuples::elementとis_sameとif_cでちまちまテストしてもいいし、
部分特殊化で一気にディスパッチしてもいい。
後者なら、メンバテンプレートは特殊化できないので、こんな感じで。

namespace detail {
  namespace bt = boost::tuples;
  template <typename Args> struct A_sig;

  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<int, bt::null_type> > > { typedef int type; };
  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<double, bt::null_type> > > { typedef double type; };
  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type> > > > { typedef void type; };
}

struct A {
  template <typename Args>
  struct sig { typedef typename detail::A_sig<Args>::type type; };
/* 以下略 */
245デフォルトの名無しさん:2007/12/26(水) 09:10:49
std::ostringstream のインスタンス oss から
boost::archive::binary_oarchive bo(oss) として
bo にいろんなクラスを流し込んだ挙句,
oss.str() で std::string を取り出して
プログラム内でやり取りすることはできますか?

つまり,std::ostringstream にバイナリを
流し込んでいいのか?ということなんですが・・・
(その点に絞ると Boost スレとはスレ違いですみません)
246デフォルトの名無しさん:2007/12/26(水) 10:04:57
Boost にはガベコレの昨日は入らないんでしょうか?
Boehm GC に似たやつとか
247デフォルトの名無しさん:2007/12/26(水) 10:08:51
BoehmさんがWG21でやってる。
248デフォルトの名無しさん:2007/12/26(水) 12:23:05
>>247
今いくつか記事読んだ.
ライブラリとしてではなくて完全に言語使用に取り込もうとしているんだね.
C++/CLI の gcnew のように新しく「ハンドル」を持ち込むわけではないんだな.

ということは結局実装は Boehm GC のような conservative GC だってことだね.
249デフォルトの名無しさん:2007/12/26(水) 16:18:56
>>244
レスありがとうございます。
アイデアよくわかりました。この考えに従って
自作プログラムをコンパイルしたところ、引数が一つのもの
については成功し実行もできました。

//aはint配列あるいはdouble配列
for_each(a, a + 3, bl::bind(A(), bl::_1)); // OK

ただ、以下はコンパイルエラーとなりました。
//aはint配列
for_each(a, a + 3, bl::bind(A(), bl::_1, 100)); //コンパイルNG

引数が二つ以上のものが実体化されるときにエラーとなるようです。
”認識できない型”と怒られているので、おそらく
bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type>が
実体化できない原因かなと思ってるのですが定かではありません。
consの形式自体はヘッドとテイルの2引数を与えていて、bl::null_type
も空の構造体として存在していましたので、型認識に問題は
なさそうなんですが、null_typeが連続して出てくるた
長い行が報告されます。(VC++ 2005 Eepress Edition)

boost::tuples::cons<const A,boost::tuples::cons<int,boost::tuples::cons<const
int,boost::tuples::detail::map_tuple_to_cons<boost::tuples::null_type,bo
ost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type
,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_t
ype,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::nul
l_type>::type>>>
250デフォルトの名無しさん:2007/12/26(水) 16:30:41
// Tuple to cons mapper ------------------------------------------------

// The empty tuple is a null_type
template <>
struct map_tuple_to_cons<null_type, null_type, null_type, null_type,
null_type, null_type, null_type, null_type, null_type, null_type>
{
 typedef null_type type;
};

ソースを見る限りではnull_typeと正しく判断されてもよいと
思うのですが。
251デフォルトの名無しさん:2007/12/26(水) 17:33:15
>>249
第二引数の型がintじゃなくてconst intとして与えられてるから特殊化にマッチしないみたいだ。
ディスパッチの前にremove_cvをかければ良いんだけど、
consリストはMPLシーケンスの要件を満たしていないみたいでtransformが使えない。
仕方ないから自分で再帰してみたら動いた。

template <typename List> struct list_remove_cv;
template <>
struct list_remove_cv<bt::null_type> { typedef bt::null_type type; };
template <typename Head, typename Tail>
struct list_remove_cv<bt::cons<Head, Tail> >
{
  typedef bt::cons<
    typename boost::remove_cv<Head>::type,
    typename list_remove_cv<Tail>::type
  > type;
};

これをやるくらいならelementとif_cで判別した方が楽かもしれない。
252デフォルトの名無しさん:2007/12/26(水) 17:57:56
もうphenixとか使った方がいいな
253デフォルトの名無しさん:2007/12/26(水) 18:25:33
>>251
毎度ありがとうございます。
難しいですね。。
自分ではまだそのようなコードは書けないです。
ただ、可能だということが分かっただけで
十分助かりました。引数型についてはelementで
引数の数についてはboost::tuples::lengthを使って
うまく組み合わせてみます。
254デフォルトの名無しさん:2007/12/26(水) 23:56:46
bjam を使って Visual C++ 用にビルドした場合,
ランタイムのリンク方法はどのようになるのでしょうか?
/MT & /MTd か /MD & /MDd のいずれなのでしょうか?
255デフォルトの名無しさん:2007/12/27(木) 00:01:26
>>254
オートリンクが、そのときの設定に合わせて自動でやってくれるので、
何もしなくてよい。
256デフォルトの名無しさん:2007/12/27(木) 00:18:37
/ML = -s
/MLd = -sgd
/MD = -mt-s
/MDd = -mt-s-gd
/MT = -mt
/MTd = -mt-gd
が全部用意されるのか・・・
/ML と /MLd は vc8 や vc9 ではすでにサポートされていないようなので
/MT と /MTd と同じものがビルドされているみたいだね.
257デフォルトの名無しさん:2007/12/27(木) 10:18:22
bjam 使ってビルドすると、たとえば
libboost_date_time-vc90-mt-gd-1_35.lib
libboost_date_time-vc90-mt-gd.lib
みたいにバージョンが入ったものとそうでないものが
ビルドされるけど、どちらか一方だけがリンカの
パスに見つかれば問題ないの?
それもオートリンクでどちらかが先に見つかって解決?
258デフォルトの名無しさん:2007/12/27(木) 10:39:45
名前マングリングの有無について設定するマクロがあったような…。
259245:2007/12/27(木) 13:12:05
うぉ、std::string に binary_oarchive で流し込んで
持ち歩けることを確認、って当たり前かもしれないけど、
ちょっと感動。

make_nvp で作った std::pair をやり取りする
連想記憶(ってただの multimap だけど)を
作って便利に使ってます。

しかし boost::archive のフォーマットが変わるかもしれないので
ちゃんと serialize で version をチェックしなきゃなぁ、
バイナリだし何が起こるかわからない。
260245:2007/12/28(金) 14:46:50
はまった(笑
制御文字を含むような std::string を boost::archive::xml_oarchive に
流し込むと XML 文書がぶっ壊れる.うむ〜.
261デフォルトの名無しさん:2007/12/28(金) 22:24:08
nifty規制解除キタ━━━━(゚∀゚)━━━━!!!
記念に糞patch晒し。
phoenixでstd::mapにoperator[]が使えなくて、渋々phoenix::binary_operatorを特殊化したら
boost::graph内(boost/graph/detail/read_graphviz_spirit.hpp)でも同じことやってるの見つけて
ブチ切れ気味にspecializations for stl iterators and containersとやらを修正してみた。

$ diff -u special_ops.hpp.orig special_ops.hpp
--- special_ops.hpp.orig 2007-12-25 10:49:20.000000000 +0900
+++ special_ops.hpp 2007-12-25 22:08:29.671875000 +0900
@@ -21,6 +21,8 @@
 ///////////////////////////////////////////////////////////////////////////////

 #include <boost/spirit/phoenix/operators.hpp>
 #include <iosfwd>
+#include <boost/typeof/typeof.hpp>
+#include <boost/utility/result_of.hpp>

 ///////////////////////////////////////////////////////////////////////////////

 #if defined(_STLPORT_VERSION) && defined(__STL_USE_OWN_NAMESPACE)
@@ -320,7 +322,8 @@
 template <typename T0, typename T1>
 struct binary_operator<index_op, T0, T1>
 {
-    typedef typename T0::reference result_type;
+    typedef BOOST_TYPEOF_TPL(&T0::operator[]) index_op_t;
+    typedef typename boost::result_of<index_op_t(T1)>::type result_type;
     static result_type eval(T0& container, T1 const& index)
     { return container[index]; }
 };
262デフォルトの名無しさん:2007/12/29(土) 13:58:37
>>261
嬉しいのは分かるけど自意識過剰なの?
263デフォルトの名無しさん:2007/12/29(土) 14:07:18
>>262
何いちいち反応しているの?
興味がないなら無視すればいいだけだろ

#include <boost/current_function.hpp>
により Visual C++ では
#define BOOST_CURRENT_FUNCTION __FUNCSIG__
にされてしまうのはなぜ?
Visual C++ なら __FUNCTION__ があるので
#define BOOST_CURRENT_FUNCTION __FUNCTION__
にならないといけないはずなのに
264デフォルトの名無しさん:2007/12/29(土) 14:39:12
>>263
いやいや興味はあるよ。
“自意識過剰なのか”という点についてね。
265デフォルトの名無しさん:2007/12/29(土) 15:22:05
void foo(){}
void bar(){}
boost::function<void(void)> f1 = foo;
boost::function<void(void)> f2 = bar;
assert(!(f1 == f2))

なぜこの比較が通らないんでしょうか?
assert(f1 == foo) なら通るんですが・・
boost::function のインスタンス同士の
比較はできないのでしょうか?
単純に関数ポインタの比較のようなことをしてくれればいいのですが.
266265:2007/12/29(土) 15:52:01
Frequently Asked Questions
Why can't I compare boost::function objects with operator== or operator!=?
http://www.boost.org/doc/html/function/faq.html#id1215129

そのまんまのことが書いてありました.
死ね,俺.
没年2007.
267デフォルトの名無しさん:2007/12/29(土) 16:01:08
>>264
スレ違い
268デフォルトの名無しさん:2007/12/31(月) 12:16:54
gcc4.1だと1.34.1よりsvn headの方が不具合が少ないような気がするんですが
気のせいですよね?
269デフォルトの名無しさん:2007/12/31(月) 15:38:12
1.34.1後にバグが修正されてるのだっていっぱいあるんだろうから
不思議ではないだろ
270デフォルトの名無しさん:2007/12/31(月) 23:49:00
Boost ではデバッグバージョンのライブラリと通常バージョンの
ライブラリが用意されていますよね、普通。たとえば bjam
でビルドすると両方のライブラリが作られるし、
Debian GNU/Linux や Ubuntu で boost-dbg を入れると
デバッグ用のライブラリが /usr/lib 以下に入り、
通常バージョンのライブラリと同居します。

で、ふと思ったのですが、Linux の一般的なディストリビューション
(RHEL や Debian) で libhoge, libhoge-dev を入れると
/usr/lib 以下に入る libhoge.a や libhoge.so は一種類だけで
特にデバッグバージョンと通常バージョンという区別はありません。
Linux のディストリビューションではパッケージングの際に
デバッグ情報をつけるか否か、デバッガで扱えるように
最適化をオフにするか否か、などについて取り決めがあるのでしょうか?
271デフォルトの名無しさん:2008/01/02(水) 12:19:06
1.35 って asio まわりの頻繁なコミットが終わったら
リリースされるのかな?
272デフォルトの名無しさん:2008/01/02(水) 16:28:40
GILがまともに使えるようになってからにしてほしいな。
jpegとpngの読み込みを正式にコミットして、
pngも通過色とかまともに対応して、
スケーリングなども用意して。
273デフォルトの名無しさん:2008/01/02(水) 16:29:41
GILとは?generic imaging libraryかなんか?
274デフォルトの名無しさん:2008/01/03(木) 02:20:39
VC++8.0とboost1.34.1を使って開発しています。

struct my_device
{
typedef char char_type;
typedef bidirectional_device_tag category;

streamsize read(char_type *s, streamsize n);
streamsize write(const char_type *s, streamsize n);
};

int main()
{
my_device device;
stream<my_device> s(device);
char one = 'b', two = 0;

s.put(one);
s.get(two);
}

my_device::write
my_device::read
の順番で呼ばれると思ったのですが、なぜかmy_device::readのほうしか呼ばれません。
なぜこのようになるのかご存じの方がいらっしゃいましたら教えてください。
275デフォルトの名無しさん:2008/01/03(木) 07:35:44
Boost Graph Library (BGL) 使っている人いますか?
BGL ではグラフの頂点や辺にプロパティを設定して
値を持たせることができますが(たとえば「色」とか),
ある値をプロパティとして持つ頂点や辺を高速に
列挙させることはできるのでしょうか?

頂点イテレータなどで全探索して列挙するのはつらいので,
プロパティマップを boost::multi_map::multi_map_container
などをつかってキーでも値でもインデックスされているような
コンテナでプロパティを保持できればと思っているのですが.

外部プロパティとして持てばよいのではないかとも思うのですが,
たとえば boost::print_graph は vertex_index_t を内部プロパティ
として持っていることを前提に作られているので,
内部プロパティの持ち方を指定してうまくやれればいいと思っています.
276デフォルトの名無しさん:2008/01/03(木) 08:51:59
こういうものを作ったんですけど、もしかして似たようなものがboostにありますか?
もしあるのだったらboostの方を使いたいです。

int var;
//キャストが必要な長い式
var = (int)(0.123456789 * 9.87654321 / 0.123456789);

//「キャストをする」と表明するだけで
//具体的な型や乱雑な括弧が必要ない
var | mycast = 0.123456789 * 9.87654321 / 0.123456789;
277デフォルトの名無しさん:2008/01/03(木) 09:00:12
仕様の詳細(初期化のみ?コピー等の動作は?)がよくわからんが、BOOST_AUTOみたいなもんかね。
278デフォルトの名無しさん:2008/01/03(木) 09:16:53
仕様というか、単に=よりも結合順位の高い演算子で左辺の参照を受け取って
operator =で右辺を代入してるだけ。
279デフォルトの名無しさん:2008/01/03(木) 09:19:18
どういうときに使うの?
280デフォルトの名無しさん:2008/01/03(木) 09:28:45
「キャストをする」と表明するしたいだけで具体的な型や乱雑な括弧を書きたくない時。
281デフォルトの名無しさん:2008/01/03(木) 09:35:05
BOOST_AUTOって変数になるトークンと初期化式を書いて
初期化式の型から変数の型を判断するやつだね。
俺が書いたのは単に代入用だけだよ。
282デフォルトの名無しさん:2008/01/03(木) 09:36:58
template<typename T>
class auto_cast_wrarapper {
    T& obj_;
public:
    auto_cast_wrarapper(T& obj)
        : obj_(obj)
    {}
    template<typename U>
    T& operator=(U const& obj) {
        return obj_ = static_cast<T>(obj);
    }
};
class auto_cast {};
template<typename T>
auto_cast_wrarapper<T> operator|(T const& lhs, auto_cast rhs) {
    return auto_cast_wrarapper<T>(lhs);
}
static auto_cast mycast;

こんな感じかな。まあboost::enable_ifとか使ってもうちょっと上手く実装してるとは思うけど。
とりあえずboostに同様のものは無かったと思われ。
283282:2008/01/03(木) 09:39:57
wrarapperってなんだorz
wrapperね。
284デフォルトの名無しさん:2008/01/03(木) 10:17:30
乱雑な括弧もなにも、右辺全体を一組の括弧で括るだけじゃないか。
285デフォルトの名無しさん:2008/01/03(木) 10:23:04
まあ、Cのキャストを使ってる時点でなんだかなぁ、と思う。
varがint形とdouble形のコンストラクタと代入演算子を持っていて、
それぞれ意味が違う場合はどうするの?
286デフォルトの名無しさん:2008/01/03(木) 14:48:38
組み込み方にしか適応できない様にする。
287デフォルトの名無しさん:2008/01/03(木) 18:11:52
>274
単にバッファリングされてるだけなんじゃないの?
>Note that the Iostreams library provides buffering by default. Consequently, the stream out must be flushed before
>the characters written are guaranteed to be reflected in the underlying string.

>http://www.boost.org/libs/iostreams/doc/tutorial/container_sink.html

>275
「BGLでは」ではなくて、むしろ「adjacency_list と adjacency_map では」が正しいんじゃないの?
内部プロパティに対するアクセス方法としては、PropertyGraph か MutablePropertyGraph に対応するものしか
用意されてないし、EdgeList とかの持ち方はカスタマイズできるけど内部プロパティの持ち方はカスタマイズできないと思う。
で、内部プロパティと外部プロパティを併用したら駄目なん?
あるいは、いっそのこと、自分で BGL の Concept に沿ったクラスを作っちゃえばいいんじゃないかな?
288デフォルトの名無しさん:2008/01/03(木) 18:39:49
274です。
writeの後にflushをしたら期待した動作になりました。
ありがとうございました。
289デフォルトの名無しさん:2008/01/03(木) 19:17:02
>>287
そうですね.外部プロパティとの併用にします.
BGL って Graphviz への出力もできるし,
その時の VertexPropertyWriter は
boost::bind や boost::lambda でファンクタ
自在に作れるし,便利ですね.
290デフォルトの名無しさん:2008/01/04(金) 01:55:41
string の vector の vector について、
各要素を std::cout に出力したいとき、
boost::bind でうまくファンクタかけないかな?
291デフォルトの名無しさん:2008/01/04(金) 10:42:43
3行目が全く意味不明
292デフォルトの名無しさん:2008/01/04(金) 10:47:30
>>291
std::vector<std::string> の参照を受け取ると
その内容を全部ずらずらと書き出すようなファンクタを
コードの途中で必要に応じて作り出せないだろうかということです。
293デフォルトの名無しさん:2008/01/04(金) 12:16:30
>>292
void operator()(const std::vector<std::string>& v)
{
 std::copy(v.begin(), v.end(), ostream_iterator<std::string>(cout, " "));
}
とかじゃだめなのか?何でboost::bindが必要なんだ?
294デフォルトの名無しさん:2008/01/04(金) 12:17:28
void operator()(const std::vector<std::string>& v) const
{
 std::copy(v.begin(), v.end(), ostream_iterator<std::string>(cout, " "));
}

constつけた。
295デフォルトの名無しさん:2008/01/07(月) 19:19:40
Boost.Statechartの事なんですが、ある状態がイベントを受け取った時、
その状態クラスのメンバ変数の値によって、次の状態に遷移するしないを分ける事はできますか?

http://www.kmonos.net/alang/boost/classes/statechart.html
ここのサンプルで例えれば、
「Locked状態はn回Coinイベントを受け取ったらUnlocked状態に遷移」という風にしたいです。
296デフォルトの名無しさん:2008/01/08(火) 14:27:54
http://d.hatena.ne.jp/niitsuma/20080108
boost.pythonをcmake(クロスプラットフォームmake)から使う方法まとめてみました
297デフォルトの名無しさん:2008/01/09(水) 20:03:20
某ソフトウェアをビルドしようとして
./configureやると
checking whether the Boost::DateTime library is available... yes
checking for main in -lboost_date_time... no
configure: error: Unable to find Boost.DateTime library, currently this is required.
って出て失敗するので,Boostライブラリを手動インストールしたのですが認識してくれません.

# ldconfig -v
で確かに
libboost_date_time-gcc41-mt-1_34_1.so.1.34.1 -> libboost_date_time-gcc41-mt.so
libboost_date_time-gcc41-1_34_1.so.1.34.1 -> libboost_date_time-gcc41.so
と追加されているはずなのですが,configuregが認識していないようです.
これどうやったら直りますか?

ちなみにyumで自動インストールするといけるのですが,自分はboost::filesystemとか使いたいので
bjamつかって自前でビルドしてインストールしました.
298297:2008/01/09(水) 20:04:41
すみません環境を書き忘れました.
Fedora Core 6でカーネルのバージョンが2.6.18-1.2798.fc6です

宜しくお願いいたします.
299デフォルトの名無しさん:2008/01/09(水) 20:07:30
/etc/ld.so.conf.d/

boost.conf
とかいう名前のファイル作ってboostインストールしたパスを書く
/usr/local/boost/lib
とか
それから
#ldconfig
300デフォルトの名無しさん:2008/01/09(水) 20:07:57
develパッケージをインスコしてないだけじゃねーの
301デフォルトの名無しさん:2008/01/09(水) 20:22:26
>>299
やってみましたが駄目でした.
ldconfig -v
/usr/local/lib:
(途中省略)
libboost_date_time-gcc41-mt-1_34_1.so.1.34.1 -> libboost_date_time-gcc41-mt.so
libboost_date_time-gcc41-1_34_1.so.1.34.1 -> libboost_date_time-gcc41.so
となっているので,ライブラリ自体は認識していると思います.

今気づいたのですが
checking whether the Boost::DateTime library is available... yes
ということはライブラリ自体は認識しているようですね...

checking for main in -lboost_date_time... no
と成っています-lboost_date_timeがおかしいということでしょうか...

>>300
yum install boostってやるときちんと./configureできてビルドできるのですが,今回は
boost::filesystemとか使いたいのでbjamつかって自前でビルドしてインストールしました.
302デフォルトの名無しさん:2008/01/09(水) 20:47:12
http://osdir.com/ml/network.bit-torrent.libtorrent/2006-10/msg00003.html
エラーメッセージでググると確かにdevel 入れろってアドバイスされてるね

sudo apt-get install libboost-dev libboost-date-time-dev
libboost-filesystem-dev libboost-serialization-dev libboost-thread-dev
libboost-regex-dev libboost-program-options-dev

fedoraは apt-get を yum install にすればいいのかな
303デフォルトの名無しさん:2008/01/13(日) 14:52:55
boostって、どうしても使わないと駄目なのですか?
会社の先輩が boost、boost と boost 自慢して煩いのですが。
304デフォルトの名無しさん:2008/01/13(日) 15:08:39
最近のコンパイラのみ使うのであれば、
使わなきゃ損。
使えない奴は低能。
305デフォルトの名無しさん:2008/01/13(日) 15:15:24
boost無かったらC++使いたくない
306デフォルトの名無しさん:2008/01/13(日) 15:17:44
boost も使えなかったら一人前とは言えない。
307デフォルトの名無しさん:2008/01/13(日) 15:23:50
boostが無いC++なんかただの欠陥言語
308デフォルトの名無しさん:2008/01/13(日) 15:25:29
TR1でいいじゃん
309デフォルトの名無しさん:2008/01/13(日) 15:59:13
filesystemで相対パスを絶対パスに変換する方法があると
Lets boostで書いてあったのですが、具体的にどうやれば
良いのでしょうか?
310デフォルトの名無しさん:2008/01/13(日) 16:35:30
current_path()で得たもので./を置換したらどうだろうか?
311デフォルトの名無しさん:2008/01/13(日) 16:39:01
アクセスできるなら相対パスでも絶対パスでもいいと思うが。
絶対パスである必要はあるの?
312デフォルトの名無しさん:2008/01/13(日) 16:41:41
別のAPIの関数に渡すためとか
313デフォルトの名無しさん:2008/01/13(日) 16:45:07
>>310
Letsだと変換が用意されてるように書かれてましたが、
自前変換しかないんですかねぇ。
314デフォルトの名無しさん:2008/01/13(日) 16:48:12
仮に自前で処理するとなると、 ./ で始まってる場合、
../ の場合、何も付いてない場合、ドライブレターの場合(最初から絶対パス)、
さらに/が\な場合など、かなり面倒な・・・
315デフォルトの名無しさん:2008/01/13(日) 17:05:29
complete()
とか、
system_complete()
で簡単に変換できると思うが。
316デフォルトの名無しさん:2008/01/13(日) 17:16:18
soreda
317デフォルトの名無しさん:2008/01/13(日) 17:20:34
>>315
まさにsoreda!
感謝感謝
318デフォルトの名無しさん:2008/01/14(月) 00:43:06
>>303
だってC++の標準ライブラリが貧弱すぎて話にならないから。
簡単なところでは正規表現とかshared_ptrとか。
bindとmem_fnもC++標準のよりBoostのほうが使いやすい。
319デフォルトの名無しさん:2008/01/14(月) 01:25:06
>>318
どうでもよくね?
プログラム全体から見ると、Boostで楽になる部分なんて 1% 以下でしょ。
320デフォルトの名無しさん:2008/01/14(月) 01:28:18
使いにくかったら存在価値ないもんな
321デフォルトの名無しさん:2008/01/14(月) 01:28:25
shared_ptr で楽になる部分はもの凄く大きいぞw
322デフォルトの名無しさん:2008/01/14(月) 01:34:13
>>321
あれって、参照カウンタで管理してるんでしょ?
循環参照したらオワタになるので、素人に使わすと逆に危ないよ。

そもそも、new するシチュエーションってそうそうあるか?
なるべく new を避けて書くのが C++er の嗜みだとおもうが。
323デフォルトの名無しさん:2008/01/14(月) 01:35:58
new しないでまともにオブジェクト指向プログラミングできるかよ。
デザインパターンの半分は使えなくなるんじゃね。
324デフォルトの名無しさん:2008/01/14(月) 01:37:00
C++標準ライブラリが貧弱だとは思わないけど
もの足りないと思うひとがBoost使ってることが多いだろうね

数万行のコード書いたら1%ってめっちゃでかいと思うんだ
(実際は1%どころじゃないけど)
325デフォルトの名無しさん:2008/01/14(月) 01:40:10
循環参照が必要になる時点で大体設計おかしいんだけど、
まあ素人に使わせるとそうなることはあるかもしれんな。
326デフォルトの名無しさん:2008/01/14(月) 01:44:03
>>323
殆どのインスタンスは、自分の親クラスのメンバ変数として一緒に確保されるから、
大きな new delete が時たまあるだけってのが普通じゃない?
細かい単位で new delete 繰り返すなんてのは、C++ には似合わないと思うが。
そういうふうに書いてくれ、と頼まれたなら仕方ないが。
327デフォルトの名無しさん:2008/01/14(月) 01:50:13
Boostを使える(に理解のある)会社を紹介してください><
328デフォルトの名無しさん:2008/01/14(月) 01:57:01
プログラミングで難しいのって、エラー時の例外処理だったり、パフォーマンスのチューニングだったり、
デバッグだったり、プロジェクトの管理だったりだよね。
Boostってあんまどうでもよくない ?
329デフォルトの名無しさん:2008/01/14(月) 01:59:20
>>322
weak_ptr
330デフォルトの名無しさん:2008/01/14(月) 02:02:09
>>328
よくない
プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
は当然あるだろ
だったらコード量が減って、難しい処理を(Boost使わないよりは)簡単に実装できるなら使ったほうがいいんじゃない
331デフォルトの名無しさん:2008/01/14(月) 02:09:09
>>330
>プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
>は当然あるだろ

えーーーー
無いなぁ。難しい処理ってのは、確かに難しいんだけど、
Boost 使ったぐらいでどうこうなるレベルの処理を、普通は難しいとは言わないよなぁ。

Boostって、「うっかりミスが防げるかもね!!」 レベルの話でしょ。
332デフォルトの名無しさん:2008/01/14(月) 02:16:40
Boostを使うと、面倒くさかったことが簡単にできることはよくある。
しかし、難しい処理の実装は、Boostを使ってもやっぱり難しいよ。
333デフォルトの名無しさん:2008/01/14(月) 02:28:31
Boostのメリットってなんだろうなと改めて考えちゃったが、
>>332が非常に簡潔な答えをくれた。

「面倒くさい」
334デフォルトの名無しさん:2008/01/14(月) 02:59:04
>>303
×どうしても使わないと駄目
○メリット大きい・デメリットやリスクが少ないなら使う
まあBoostに限らないけど。

使いこなせる人間がわずかしかいないプロジェクトに導入したりするのはまずいかと。
新しいものを覚えるコストはゼロじゃないよ。
(誰か1人が使うだけで話が完結するならいいかもしれんが)

まあ、各人がBoostを使えた方が開発効率がよいとは思う。
気長に導入しようって話ならいいんでは?
335デフォルトの名無しさん:2008/01/14(月) 03:31:24
boost使ったからって2倍も3倍も生産効率があがるわけじゃないしなぁ
336デフォルトの名無しさん:2008/01/14(月) 03:43:36
3倍効率が上がらないライブラリは導入しません。
337デフォルトの名無しさん:2008/01/14(月) 04:41:24
だいたい、ライブラリって何かに特化しているから丸投げで来て便利なわけだよな。
でも、Boostって何かに特化しているってわけでもないんだよな。
だから使ったところで丸投げできないし、結局あんまブーストしない。
338デフォルトの名無しさん:2008/01/14(月) 05:07:10
STLを使うのと同じ理由じゃいかんのかな。
339デフォルトの名無しさん:2008/01/14(月) 08:45:01
Boostはもう便利と言うより無いと不自然なライブラリになってる
効率上げると言うより無いと効率下がる
いまさらshared_ptrもfunctionもutilityもoperatorsもcstdintも無しで済ませるのは苦痛だ
340デフォルトの名無しさん:2008/01/14(月) 09:22:08
>>326
超頻出の Strategy パターンとか、大体 new が必要になるよね。
必要ない事もありはするけど。
shared_ptr や ptr_container があるだけで、メモリ管理がだいぶ楽になる。
341デフォルトの名無しさん:2008/01/14(月) 10:08:58
ptr_list に delete してほしくないポインタを渡すことはできますか?
342デフォルトの名無しさん:2008/01/14(月) 10:11:14
boostを使わないって?
使いこなせる人間がわずかしかいないって?(勉強はしないの?)
こういうことだから日本のIT産業は
343デフォルトの名無しさん:2008/01/14(月) 11:21:35
>>341
コンテナを渡すといいよ
344デフォルトの名無しさん:2008/01/14(月) 11:22:59
>勉強はしないの?

勉強する香具師は少数派
345デフォルトの名無しさん:2008/01/14(月) 11:22:59
>>341
ptr_container系はデストラクト時に必ず要素をdeleteする。
嫌ならデストラクト前にdeleteしてほしくないメンバをコンテナから削除しないと駄目。
346デフォルトの名無しさん:2008/01/14(月) 11:30:29
業務系はboostを勉強する暇があったら資格取れって話になるからな。
資格さえあれば仕事もついてくるって構図だから仕方ないけど。
347デフォルトの名無しさん:2008/01/14(月) 11:54:48
>>343>>345
大体分かりました。
その制限を踏まえて色々考えてみます。
348デフォルトの名無しさん:2008/01/14(月) 12:43:05
>>340
普通メンバ変数として確保しておいて、切り替え時にインターフェイス用のポインタを切り替えるだけだな。
いちいち new するとかタコすぎる
349デフォルトの名無しさん:2008/01/14(月) 12:46:16
まあ、そうやるときもあるけども、
new した方がいい時も多い。
350デフォルトの名無しさん:2008/01/14(月) 12:47:26
>>339
なんかさ、開発効率って、結局そういうところで決まらなくね?
むしろ、>>328 のようなことの方が影響大きいと思うのだが。
351デフォルトの名無しさん:2008/01/14(月) 12:49:46
だいたい、メモリ管理なんてそんなに面倒か?
メモリリークなんて、リソースリークも含めてここ数年出したことねぇなぁ。
設計がおかしいんじゃね?
352デフォルトの名無しさん:2008/01/14(月) 12:55:06
自分の世界しか見えてない人多すぎ
353デフォルトの名無しさん:2008/01/14(月) 13:39:37
面倒だからjava、C#はGCを実装したんだろ
354デフォルトの名無しさん:2008/01/14(月) 14:48:47
GCは便利だね。だけどあれはメモリコンパクションあってのものだと思うよ。
メモリコンパクション無しで、しかも参照カウンタで管理だなんて、存在価値なくね ?
355デフォルトの名無しさん:2008/01/14(月) 14:58:47
Boostを知らない者はC++を知らない (自明)
C++を知らない者はCを知らない (templateはマクロでvirtualは関数ポインタだった)
Cを知らない者はプログラミングを知らない (自明)

対偶を取ろう
プログラミングを知る者はBoostを知っている
356デフォルトの名無しさん:2008/01/14(月) 15:05:47
ど頭から真理でないやんけ
357デフォルトの名無しさん:2008/01/14(月) 15:07:58
たしかに、templateはマクロで仮想関数は関数ポインタだが、
だからといって、どうして、「C++を知らない者はCを知らない」ということになるんだ?
普通逆だろ。
「C++のtemplateと仮想関数は、元々はCのマクロと関数ポインタであるので、
C++の元となったCを理解していないと、C++を理解したということにならない。」
となるのが普通だろ。

(自明)とか使ってる時点で釣りなんだろうが。

358デフォルトの名無しさん:2008/01/14(月) 15:15:50
>>355
危うく納得するところだった。
こういう詭弁はなんと命名されているのだろうか?個別性質と集合抱合のすり替え?
359デフォルトの名無しさん:2008/01/14(月) 15:27:01
要はこういうこと。

偽: 「C があったから C++ が生まれた。」
真: 「C++ が生まれたのは、C があったから。」

C++の基礎としてCがあるのであって、Cの拡張としてC++があるというわけではない。
「Cの拡張としてC++がある」というのは一見正しそうだが、単なる結果論に過ぎない。
マンガの見すぎ、精神論、文系脳。
ただ単に、「C++の基礎としてCがある」という事実があるだけ。
これがロジカルな思考、現実、理系脳。
360デフォルトの名無しさん:2008/01/14(月) 16:38:26
>>359
論理学・集合論的に説明してくれないと.....。
361デフォルトの名無しさん:2008/01/14(月) 16:43:49
>C++ が生まれたのは、C があったから。
表現を簡単にしすぎて誤解しやすい表現になってる気が。
362デフォルトの名無しさん:2008/01/14(月) 16:51:57
>>359
どう見ても「理系」の推論方法ではないな。そもそも「理系」という言葉を使う時点でアウトだ。
>>355 は一種のジョークだ。
363デフォルトの名無しさん:2008/01/14(月) 18:00:43
C++ is not PreProcessor = C++(cpp)
364デフォルトの名無しさん:2008/01/14(月) 18:14:18
とりあえずD&Eでも読んでみるか
365デフォルトの名無しさん:2008/01/14(月) 18:19:09
Object-Perlとか
Object-COBOLとか
そりゃもう悲惨だからな
366デフォルトの名無しさん:2008/01/14(月) 20:09:11
322の言うとおりならc++なんぞ使わずにcでいいじゃねぇかと思う今日この頃
newの無いc++なんざcとかわらん
367デフォルトの名無しさん:2008/01/14(月) 20:40:18
>>326
scoped_ptr
368デフォルトの名無しさん:2008/01/14(月) 22:11:49
>>367
scoped_ptr ってあれ一体何に使うの?
スコープはずれたら解放するってんなら、初めからスタックの上に確保すりゃいいんじゃね ?
それともマルチスレッド対策 ?
369デフォルトの名無しさん:2008/01/14(月) 22:14:15
>>366
逆に C++ で new とか使いまくるぐらいなら、C++ なんぞ使わずに Java 使えばいいのにと思う。
370デフォルトの名無しさん:2008/01/14(月) 22:22:28
>>368
new したポインタを返すような関数から返されてきたポインタを受けるときとか。

>>369
placement new を使った効率的なメモリ管理を選択する事もできるから、
C++ には C++ なりの利点がある。
371デフォルトの名無しさん:2008/01/14(月) 22:26:50
>>368
pimplで使う
372デフォルトの名無しさん:2008/01/14(月) 22:44:36
>>370
>new したポインタを返すような関数から返されてきたポインタを受けるときとか。
C++ でそんなことするやつ居るのか。
素直に Java 使えよ。

>placement new を使った効率的なメモリ管理を選択する事もできるから、
placement new と smart_ptr って相性悪くね ?
373デフォルトの名無しさん:2008/01/14(月) 22:47:23
>>370
>new したポインタを返すような関数から返されてきたポインタを受けるときとか
それはどちらかというとauto_ptrだと思う。
scoped_ptrはswapはできるけど(auto_ptr的な意味での)releaseができないから、
呼び出し側が他の方法でdelete管理をしたい時困る。

>>368
pimplとかfactoryパターンの生成物とか。
374デフォルトの名無しさん:2008/01/14(月) 22:48:53
さっきから同一人物っぽいが、なんでポインタの扱い方がどうこう程度でJavaに乗り換えなきゃならんのだ。
その程度の理由で乗り換えないし乗り換えられない状況だって腐るほどあるだろうに。
375デフォルトの名無しさん:2008/01/14(月) 22:50:36
C++ 使わずに C 使えば ?
って言われたから、じゃぁ Java 使えば ?
って言い返しただけだよ。
376デフォルトの名無しさん:2008/01/14(月) 22:53:45
とりあえずJavaはNGワードの方向で
377デフォルトの名無しさん:2008/01/14(月) 23:01:27
>>373
auto_ptr は次期 C++ で deprecated になります。
378デフォルトの名無しさん:2008/01/14(月) 23:12:10
PCベースの人と組み込み(寄り)の人じゃメモリに関する認識が
ぜんぜん違うから、どこまでいっても平行線
379デフォルトの名無しさん:2008/01/14(月) 23:18:12
Java はデストラクタがないから
リソース管理が面倒。
380デフォルトの名無しさん:2008/01/14(月) 23:24:05
>>377
うまくいけば代わりにunique_ptrが入る。
381デフォルトの名無しさん:2008/01/15(火) 03:24:54
unique_ptrってauto_ptrで削除子を決めれるようになっただけ?
382デフォルトの名無しさん:2008/01/15(火) 14:22:11
move への対応が一番大きい進歩ではないかと
383デフォルトの名無しさん:2008/01/15(火) 18:52:21
Deleter 指定可
explicit operator bool() 装備
代入でmoveはできず、std::move()が必要

こんなとこだっけ?
まあ似たようなもの2つあると初心者は混乱しそうだが
384デフォルトの名無しさん:2008/01/20(日) 11:36:15
boost::ptr_list<Hoge> a, b; があったとして、
b の内容全てを a の後ろに移動したいのですが、
そういうことはできますか? 出来る限り簡単な方法で。
385デフォルトの名無しさん:2008/01/20(日) 12:29:25
よくわからないけど
std::copy とか使えないのかな
386デフォルトの名無しさん:2008/01/20(日) 13:04:05
一応1つの方法として
常に false を返す比較関数を使って merge する方法は思いつきましたが、
何かエレガントじゃないというか・・・。

>>385
コピーじゃなくて移動なんです。
a の最後に b の要素を付け加えて b は空にしてしまう、という形ですが、
内部的には単なるノードのつけかえで実現されるのがベストです。
387デフォルトの名無しさん:2008/01/20(日) 13:38:59
splice
388デフォルトの名無しさん:2008/01/20(日) 15:08:07
ptr_list には splice がないようですが、
代わりに transfer というのがありました。
ありがとうございました。
389デフォルトの名無しさん:2008/01/21(月) 23:08:31
cmakeにFindBoostてコマンド追加されたらしい
http://www.cmake.org/Bug/view.php?id=6257
これでboostのpathをmakeに書かなくてもよくなったのかな
390デフォルトの名無しさん:2008/01/22(火) 00:26:18
____
|← reject|  boostの中の人  singleton   ユーザー
. ̄.|| ̄ ̄        ┗(^o^ )┳(`Д´)┳(^o^ )┛≡=-
  ||            ┏┗   ┗┗  ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
391デフォルトの名無しさん:2008/01/22(火) 01:05:59
嫌がってるじゃないかw
392デフォルトの名無しさん:2008/01/22(火) 02:08:26
boost には配列サイズを取得するマクロとかないんですか?
393デフォルトの名無しさん:2008/01/22(火) 02:23:18
>>392
つ配列使わずにコンテナを使う
394デフォルトの名無しさん:2008/01/22(火) 02:28:24
そんな気もしてましたが、やっぱりそうなのですか・・・。
395デフォルトの名無しさん:2008/01/22(火) 02:37:11
>>392
Boost.Preprocessorにそんなようなマクロがあったような気が・・・
396デフォルトの名無しさん:2008/01/22(火) 03:12:46
boost::rangeにあるsize関数ならコンパイル時決定ではないが簡潔。
397デフォルトの名無しさん:2008/01/22(火) 05:22:38
え〜?singleton がリジェクト?
[review] General comment on boost::singleton
http://www.nabble.com/-review--General-comment-on-boost::singleton-td14952506.html
Tobias Schwinger
http://torjo.com/tobias/
これでつか?(T^T)
398デフォルトの名無しさん:2008/01/22(火) 05:36:26
シングルトン「うはwwwboostなんつー変態ライブラリ入りなんて死んでもお断りwwwwww
一生孤独でおkwwwwwwシングルトンだけにwww」

俺「\(^o^)/」
399デフォルトの名無しさん:2008/01/22(火) 06:00:18
単純なデザインパターンだけど実装はいろいろあって大変なのかな
400デフォルトの名無しさん:2008/01/22(火) 06:27:47
>>399
完全な、あるいは既知の欠陥がないSingletonライブラリを実装するのはほとんど不可能ってレベルで。

大体BoostでSingletonが蹴られたのってこれで何度目だ?
401デフォルトの名無しさん:2008/01/22(火) 06:33:15
boostはsseに対応していますか?
402デフォルトの名無しさん:2008/01/22(火) 09:21:54
Singletonは言語レベルで実装してくれないと苦しい部分が多いと思う。
403デフォルトの名無しさん:2008/01/22(火) 10:47:25
シングルトンはグローバル変数同然っていうよく聞く話があって、それを推奨するような
ライブラリの提供という点で否定的なレビューが多くあがってた。

作者によると今回の singleton は、スレッド安全な動的初期化と、はっきりした
初期化順や破棄タイミングを提供するらしいけど、否定的な人たちに言わせれば
それらをシングルトンとは関係ない個別の機能として提供すべきだとか、そういう話。

元はこっちの巨大なスレッドね。
http://www.nabble.com/-review--Fast-track-review-of-Boost.Utility-Singleton-begins-today-to14806433.html
404デフォルトの名無しさん:2008/01/22(火) 12:30:29
で,自分はこれを使っているんだけど
http://www.boost.org/libs/pool/doc/implementation/singleton.html
やっぱり details 以下のものを使うのは良くないのかなぁ.
405デフォルトの名無しさん:2008/01/22(火) 12:50:47
提案としては悪くないんだけど、
何でもぶちこみすぎているから分解を検討しましょうってことだよね。
406デフォルトの名無しさん:2008/01/22(火) 19:45:28
プロパティにブレークポイント置けるだけで
グローバル変数よりは随分マシだけどね。
407デフォルトの名無しさん:2008/01/23(水) 19:02:33
最近lambda使い出したモノです。

struct Foo
{
  int var;
};

vector<Foo*> vData;

...vDataの中身をいろいろ埋める

sort(vData.begin(), vData.end(), _1->var < _2->var); ←コンパイルエラー

これって実現方法あります?
これ以上複雑に書かないとだめなら普通に述語書いたほうがいいような気がする・・・
vectorがFooのポインタなのは実装上の理由です。
408デフォルトの名無しさん:2008/01/23(水) 20:27:52
bind(&Foo::var, _1) < bind(&Foo::var, _2)か_1->*&Foo::var < _2->*&Foo::var
409デフォルトの名無しさん:2008/01/23(水) 21:15:54
Operators that cannot be overloaded

Some operators cannot be overloaded at all (::, ., .*). For some
operators, the requirements on return types prevent them to be
overloaded to create lambda functors. These operators are ->., ->, new,
new[], delete, delete[] and ?: (the conditional operator).

410デフォルトの名無しさん:2008/01/28(月) 11:30:59
>206
今更ながらいただきました。thx!
自力コンパイルする前にこのスレ覗いてよかった。
411デフォルトの名無しさん:2008/01/28(月) 15:15:52
>>410
どういたしまして.ただビルドしておいてるだけですが.
同僚から ICU 対応は?とか,もっとアップデートしろ
とか突き上げ食らってまして,そのうちまた新しいもの
置いておきます.
412デフォルトの名無しさん:2008/01/29(火) 01:48:44
>>411

私も今いただきました。
私もスタティックだけを使うのでありがたいです。
/MT /MTd で作成されているのですよね!?
413デフォルトの名無しさん:2008/01/29(火) 02:21:41
414デフォルトの名無しさん:2008/01/29(火) 06:56:25
>>412-413
説明不足ですみません.
>>207 はそこに置いてある他のライブラリ(gmp とか mpfr とか)
で特に記述のないものは /MD, /MDd でコンパイルしています
ということで,boost に限って言えば bjam が /MT /MTd /MD /MDd
のすべてに関してビルドしてくれます.さらにオートリンクにより
適切なものが選ばれます.詳しくは boost/config/auto_link.hpp
を見てください.

余談ですが,自分がデフォルトを /MD /MDd にしている理由は
マネージドと混在させたい場合が時々あるからです.
/MT /MTd でコンパイルしたコードはマネージドと混在できません.
415411:2008/01/29(火) 07:50:47
Boost のバイナリだけ独立したページにしました.
http://svn.windy.cx/ から辿ってください.
あと,直リンクしやすいようにダウンロードを PHP 経由ではなくしました.
別にダウンロードされた回数とかカウントする必要ないので.
何かおかしいところがあったらここか上のWikiのコメント欄にでも.
416デフォルトの名無しさん:2008/01/29(火) 18:37:51
boost.guid ってどうなったんだっけ?
417デフォルトの名無しさん:2008/01/29(火) 18:52:13
実装にセキュリティ上の問題があるとかで、見送られたんじゃなかったっけ。


Windowsだと、簡単に世界で一意なGUID生成できるので、
Windowsでしかプログラミングしない自分としては、あんまりいらないな。
418デフォルトの名無しさん:2008/01/29(火) 19:11:14
あれってWindows以外もあるヘテロな環境でもOKなの?
419デフォルトの名無しさん:2008/01/29(火) 19:59:36
urn:uuid なんかの RFC を読むと GUID じゃなくて UUID
って名称を使ってるんだよね.名称をどっちにするか
っていう話も出てた気がする.

あとは生成アルゴリズムがMicrosoftのそれと同じなのか
どうかとか.同じじゃないとして何か問題起きないの?とか.
420デフォルトの名無しさん:2008/01/29(火) 20:03:09
uuidgen くらい Windows 以外にもあるだっしょ?
421デフォルトの名無しさん:2008/01/29(火) 20:26:28
ひとつの環境でしか動かないならそもそもBoostイラネ
WindowsならクソみたいなMFC使ってればいいじゃん
422デフォルトの名無しさん:2008/01/29(火) 21:04:43
>>421
誰もWindows限定で話なんてしてないじゃん.
そうじゃなくて,セキュリティ上の考慮
(この場合は衝突がどれくらいの確率で起きるか)
をしたポータブルな実装が必要だって話でしょ?
なんでMFCの話なん過去のスレッドで出すかなぁ.
423デフォルトの名無しさん:2008/01/29(火) 21:13:44
< なんでMFCなんて過去の遺物をBoostスレッドで出すかなぁ.
と補完しました
424デフォルトの名無しさん:2008/01/30(水) 01:41:03
singleton は無事 reject されましたとさ。
425デフォルトの名無しさん:2008/01/30(水) 02:26:55
無事ってひどいなw
426デフォルトの名無しさん:2008/01/31(木) 09:33:42
class Gamma{
public:
typedef Gamma type;
typedef size_t value_type;
const static int value = 1;
const static int value2 = 1;
typedef mpl::integral_c_tag tag;

};

template <class T>
struct RetVal2{
const static int value = T::value2;
};

typedef mpl::list< Gamma, Gamma> LIST;

int main(){
  cout << mpl::accumulate< LIST, mpl::int_<0>, mpl::plus<mpl::_1, mpl::int_< RetVal2<mpl::_2>::value > > >::type::value << endl;
return 0;
}

Gamma::value2の合計を出したいんですが、accumulate中にRetVal2にGamma以外のクラスが入力されているようで
value2がないぞと起こられます(多分mpl_::naというやつだと思いますが)。
value以外の数値を合計する方法を教えてください。
427デフォルトの名無しさん:2008/01/31(木) 10:23:59
>>420
使われてますね,結構いろんな場所で.
たとえば Subversion ではリポジトリの識別に
UUIDが使われています.working copy で
svn info とすれば UUID がわかります.
428デフォルトの名無しさん:2008/02/01(金) 10:56:20
VC++2005です。

class SuperFoo {};
class Foo : public SuperFoo {};
こんな感じのクラスがあって、

void DoSomething(SuperFoo *p);
みたいな関数があったとすると、

DoSomething(new Foo);
のようにできますよね。

void DoSomething2(shared_ptr<SuperFoo> p);
しかしこんな関数だと、

DoSomething(shared_ptr<Foo>(new Foo));
ってやるとエラーになるのでstatic_pointer_castしてやらんといけないのですが、
親クラスのキャストはいちいちやりたくないです。

これってこういうものなのでしょうか?
429デフォルトの名無しさん:2008/02/01(金) 11:12:35
>>428
SuperFoo* と boost::shared_ptr<Foo> は暗黙の変換のない無関係な型でしょ。
DoSomething2(shared_ptr<Foo>(new Foo)); はOK。
430デフォルトの名無しさん:2008/02/01(金) 11:20:35
>>429
最後の1行間違ってました。
DoSomething2(shared_ptr<Foo>(new Foo));でエラーになるということです…。
431デフォルトの名無しさん:2008/02/01(金) 11:31:13
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
class SuperFoo{};
class Foo : public SuperFoo{};
void DoSomething2(shared_ptr<SuperFoo> p){}

int _tmain(int argc, _TCHAR* argv[]){
DoSomething2(shared_ptr<Foo>(new Foo));
return 0;
}

VC++2005だがエラーなんて起こらないぞ
432デフォルトの名無しさん:2008/02/01(金) 11:39:13
>>431
すみません自分が間違ってました。

void DoSomething2(shared_ptr<SuperFoo> p);
ではなくて
void DoSomething2(shared_ptr<SuperFoo> &p);
だったのがまずかったようです。
参照をやめたら通るようになりました。
433デフォルトの名無しさん:2008/02/01(金) 13:15:53
豆知識
非constな参照引数に一時オブジェクトは渡せない
434デフォルトの名無しさん:2008/02/01(金) 13:27:43
さらに豆知識
VisualCに限り可能だったりする
435デフォルトの名無しさん:2008/02/02(土) 23:31:20
もうひとつ豆知識
関数の呼び出し式でスマートポインタを構築すべきでない
DoSomething3(shared_ptr<Foo>(new Foo), bar());
だと引数の評価順序は不定なのでnew Foo→bar()で例外送出→shared_ptr構築されず→メモリリークになる可能性がある
436デフォルトの名無しさん:2008/02/02(土) 23:37:36
そういえばそうだったな
引数の評価順序が不貞とか直感に反するふざけた仕様だよな
437デフォルトの名無しさん:2008/02/03(日) 00:34:33
&& か || をオーバーロードして引数の評価順序をちゃんと常識的な社会の貞操ルールに従えさせるものでもつくりませう
438デフォルトの名無しさん:2008/02/03(日) 02:46:57
コンマ演算子も評価順序決まってるから
それ使うのが一番いいと思うぜ。
439デフォルトの名無しさん:2008/02/03(日) 03:40:58
boost::chastityfunction, func, a, b, c, d, ・・・・・
440デフォルトの名無しさん:2008/02/03(日) 10:30:15
>>435
メイヤーズの受け売りじゃないですか
441デフォルトの名無しさん:2008/02/03(日) 10:31:55
>>433
それ常識じゃないですか
>>434
警告レベル上げると非標準と出せることは
サッターがGotWでも言ってますよ
442デフォルトの名無しさん:2008/02/03(日) 11:06:59
警告は所詮コンパイル通るし
443デフォルトの名無しさん:2008/02/03(日) 14:47:36
VC2005 で STL,Boost をスタティックリンクして .DLL を作ることはできるでしょうか?
444デフォルトの名無しさん:2008/02/03(日) 14:50:24
STL はテンプレートライブラリだからリンクなんて不要
Boost もテンプレートのみの範囲なら同様。
445デフォルトの名無しさん:2008/02/03(日) 14:52:24
boostConって何やるの?
BoostCon Call for Sessionsとかメール流れてるけど
446443:2008/02/03(日) 17:26:04
>444
ありがとうございます。
STL は無条件で問題ないんですね。
Boost でライブラリを使ってスタティックリンクをして .DLL は作成可能でしょうか?
447デフォルトの名無しさん:2008/02/03(日) 18:41:08
というかboostのDLL版なんて使うことあるのか?
448443:2008/02/03(日) 18:47:55
>>447

Boost をスタティックリンクした 自作DLLを作りたいんですが。。。
449デフォルトの名無しさん:2008/02/03(日) 19:02:18
>447 TestUnitやRegexなど一部で必要。
でもxpressiveみたいな代替案もあるので、普通に使っている限りは要らないと思う。
450デフォルトの名無しさん:2008/02/03(日) 19:28:05
>>449
そういう場合でもWindowsだと普通はスタティックリンク版使うだろうってこと。
その辺の制御するマクロもなんかあった気がするが。
451443:2008/02/03(日) 19:34:03
Boost は普段スタティックリンクしています。
.DLL は消していますので。
それをスタティックリンクして、自作のプログラムの .DLL をつくれるのかなぁと思ったもので;;;
1本の .exe が大きくなりすぎて、機能ごとに .DLL にしないと、Debug Build のブラウザ情報の書きだしに
時間が掛かって待ちきれないので;
452デフォルトの名無しさん:2008/02/03(日) 19:51:15
適当なDLLプロジェクト作ってBoost使うコード書いてコンパイルすればわかる事なのに、
なぜ試さないのか。
453443:2008/02/03(日) 21:37:15
すみません、先輩方に聞いた方が確かだと思ったので;
実験するだけでも難しかしいなぁと思って;
できるって教えて頂ければ何とか、チャレンジしたいと思います。
454デフォルトの名無しさん:2008/02/03(日) 22:37:46
boost関係ないので初心者質問スレへでも行って下さい。
ここで粘着してもスルーされるだけですよ。
455デフォルトの名無しさん:2008/02/07(木) 15:57:22
std::for_each の第三引数が参照で渡せたらなぁ
と長い間思っていたのですが、 boost::ref というのは
そういうときのためにあるのでしょうか?

内部状態を持ったまま幾つものコンテナをなめまわしたいとき,
pred (←第三引数)を渡すといちいちコピーが発生するより
参照で渡したいなぁと.
456デフォルトの名無しさん:2008/02/07(木) 16:30:28
うん
457デフォルトの名無しさん:2008/02/07(木) 17:19:53
銀なら5枚、金なら1枚 ?
458デフォルトの名無しさん:2008/02/07(木) 17:20:02
まちがえた
459デフォルトの名無しさん:2008/02/07(木) 17:23:08
>>457
サイズによって違うよ、銀は三枚のこともあるよ
460デフォルトの名無しさん:2008/02/07(木) 19:36:06
実際ブーストってどんくらいつかわれてんの?
461デフォルトの名無しさん:2008/02/07(木) 20:20:44
boostのサイトとかにあったような
462デフォルトの名無しさん:2008/02/07(木) 20:28:07
boost内のあっちとこっちで、全然違うだろうな。
463デフォルトの名無しさん:2008/02/07(木) 20:29:49
progress_displayの悪口はそこまでだ

あとspiritも
464デフォルトの名無しさん:2008/02/07(木) 20:37:27
spiritはregexと同じぐらいお世話になってる
465デフォルトの名無しさん:2008/02/07(木) 21:41:42
spirit「あるある」
regex「ねーよ」
466デフォルトの名無しさん:2008/02/07(木) 23:00:03
xpressive「まあまあ」
467デフォルトの名無しさん:2008/02/08(金) 04:16:43
compressed_pair「わたしのためにー けんかはやめてー」
468デフォルトの名無しさん:2008/02/08(金) 13:30:59
boost svn最近更新少ないねー
そろそろC++も終わりと考えていいのかな?
469デフォルトの名無しさん:2008/02/08(金) 14:42:02
発想が飛躍しすぎではないか
470デフォルトの名無しさん:2008/02/08(金) 15:00:31
更新ばっかされる不安定状態は本来よろしくない。
枯れないとC++標準として採用できないではないか。
471デフォルトの名無しさん:2008/02/08(金) 21:55:57
C++0xで一儲けするぜ。
472デフォルトの名無しさん:2008/02/09(土) 14:39:41
headのは1.35だけどバグだらけじゃん
それでも更新が少ないって事はboostの開発者達は皆C++捨てて他の言語にいっちゃったって事じゃないのかなーとか思ったり
473デフォルトの名無しさん:2008/02/09(土) 15:28:19
>472
の割にはレビューはそれなりに継続して行われてる気がするんだが。
474デフォルトの名無しさん:2008/02/09(土) 16:34:47
>>472

更新少ないのかな?
svn見る限りでは2月に入ってリビジョンは64上がってるんだが
475デフォルトの名無しさん:2008/02/09(土) 16:42:45

もしかしてCVSの方を見てるとか?
boostの開発はsubversionに移行しててCVSの方は更新止まってるからね。
476デフォルトの名無しさん:2008/02/09(土) 20:04:20
>>472
boosterの変態的嗜好を満足させる言語がほかにあるとは考えにくいがどうだろう。
477デフォルトの名無しさん:2008/02/10(日) 00:22:55
就活でESに使ったライブラリにboostって書いたんだが聞かれたらどうしよう
478デフォルトの名無しさん:2008/02/10(日) 01:44:11
>>477
boots の間違いでした,って言え
479デフォルトの名無しさん:2008/02/10(日) 08:48:09
つ boost::assert
480デフォルトの名無しさん:2008/02/10(日) 12:00:50
SVNの1.35をVC++ 2008 EEでビルドしても、
Debug版が作られないのですが、こういうものなのでしょうか?
コマンドラインはこうしています。
bjam -sTOOLS=msvc "-sBUILD=<runtime-build>release debug <runtime-link>dynamic <threading>multi" stage
481デフォルトの名無しさん:2008/02/10(日) 12:04:10
435 名前:デフォルトの名無しさん 投稿日:2007/07/17(火) 00:59:05
Linux で以下のように release かつ dynamic のライブラリをビルドしようとすると
debug と static の組み合わせもビルドして大量のライブラリができるけど,どこが
間違っているでしょうか? Boost は 1.34.0 です。

./bjam --toolset=gcc --prefix=/usr/local -sBUILD="release <runtime-link>dynamic" --with-regex install



436 名前:デフォルトの名無しさん 投稿日:2007/07/17(火) 01:26:03
>>435
Boost.BuildがV2になったんで-sBUILD消滅
<hoge>hageをhoge=hageにしてオプションとして渡せばおk
482デフォルトの名無しさん:2008/02/10(日) 12:42:17
自分は Visual C++ 2008 Express Edition でビルドするときは
bjam --builddir=builddir-vc9 --build-type=complete --toolset=msvc-9.0 stage >..\build.log
こんな風にしてます。

http://svn.windy.cx/Building/boost-trunk/
をチェックアウトして vc8.bat か vc9.bat をクリックすれば
ビルドできるようになってます。その後 crop.bat をクリックすれば
静的ライブラリ、動的ライブラリ、ヘッダを3つの*.cabファイルに回収します
外部リポジトリとして boost の trunk を指定しているので
チェックアウトにはめちゃくちゃ時間がかかると思います。

http://svn.windy.cx/index.php?boost
いちおうここにWindows用のバイナリをおいてみました。
483482:2008/02/10(日) 12:44:35
ちょっとうそです。vc8 か vc9 をクリックするだけで
3つの *.cab ができます。ICU なしでビルドするように
なってますので、必要なら適当にいじってください。

ためしにやってみたけど ICU 見つけてくれなかった(笑
まじめにやれ>俺
484デフォルトの名無しさん:2008/02/10(日) 22:58:35
散々既出だったんですね、すみません。
DLL版があれば十分なので結局こうしました。
bjam --toolset=msvc-9.0 debug release --runtime-link=shared --
link=shared --threading=multi --without-python stage 2>&1 | tee h:\boost.log
485デフォルトの名無しさん:2008/02/10(日) 23:43:22
みんなboostってどのくらい把握してる?
ソースとか全部追ってるの?
謙遜とかなしに、みんなどれくらいboostを掘り下げてるか教えて欲しい。
486デフォルトの名無しさん:2008/02/10(日) 23:51:31
MPLのソース見ようとして速攻で挫折した
487デフォルトの名無しさん:2008/02/11(月) 00:02:28
リファレンスがないと何も書けない。
さすがにBindとかFunctionとか簡単なラムダ式はそらで書けるけど。
488デフォルトの名無しさん:2008/02/11(月) 00:20:03
Spiritなら何回か世話になったからそこそこ。
Graph勉強しようとしたけどワカンネ
489デフォルトの名無しさん:2008/02/11(月) 00:23:47
shared_ptrだけ世話になってる。あとはmem_fnをたまに。
490デフォルトの名無しさん:2008/02/11(月) 01:16:27
rangeの存在意義がいまいちわからんぽ

イテレータに比べてどんな事がうれしいんだろう

今のところ「イテレータより簡潔に書ける事がある」
位の理解しか出来てないっす
491デフォルトの名無しさん:2008/02/11(月) 03:09:39
STLコンテナじゃないものにも使えるのが好きだな。
組込配列とか、イテレータのpairを即興で作ったりとか。
俺自身はサンプル見ただけだけど、CStringとかそっちもRange化できるし。
492デフォルトの名無しさん:2008/02/11(月) 03:50:10
lexical_castとか小物はよく使う
493デフォルトの名無しさん:2008/02/11(月) 05:21:18
optionalはお気に入り。
494デフォルトの名無しさん:2008/02/11(月) 06:23:57
regex使われてないのかな?意外
495デフォルトの名無しさん:2008/02/11(月) 09:40:33
regex面倒臭い。
xpressive使ってる。
496デフォルトの名無しさん:2008/02/11(月) 12:21:29
xpressiveなんてのが増えてたのか。
regexとモロかぶってるw

しかし、ライブラリのコンパイル不要なのと
static regexが使える意外で、regexと何か
大きな違いがあるのだろうか?
497デフォルトの名無しさん:2008/02/11(月) 12:26:46
速い(静的な意味で)
498デフォルトの名無しさん:2008/02/11(月) 12:28:02
regexと比べて全体的に速い
リンク不要といっても演算子によってフル展開されるから
総コンパイル時間は長くなる
499デフォルトの名無しさん:2008/02/11(月) 15:41:15
>496
再帰処理が可能なのも大きい。
普通の正規表現では対応できない入れ子表現なんかも処理できる。
500デフォルトの名無しさん:2008/02/11(月) 16:50:37
あの、なんでこのコードでboost::algorithm::findと曖昧と言われるんでしょう?
VC++ 9とかg++ 4.1.1にBoost 1.34.1, range_exは1.0 (?)ですけど。

#include <istream>
#include <string>
#include <boost/algorithm/string/find.hpp>
#include <boost/range_ex/algorithm.hpp>

void f(std::istream& is)
{
  using std::string;
  string s;
  getline(is, s);
  string::iterator it = boost::find(s, ':'); //range_exのやつを呼びたい。
}
501デフォルトの名無しさん:2008/02/11(月) 17:01:05
>>497-499
なるほど。staticなら早いだろうなってのは
予想してたけど、表記のネストも可能になるんだ。
502デフォルトの名無しさん:2008/02/12(火) 20:48:21
boost.python
python.numpy
をこれから使いまくろうと思ってる
503デフォルトの名無しさん:2008/02/12(火) 23:42:49
rule hoge ( name ) {
  exe $(name) : ./$(name).cpp ;
  exec $(name)-run : $(name) ;
}
local hogehoge = [ modules.peek : ARGV ] ;
hoge [ MATCH "^--name=(.*)" : $(hogehoge[2]) ] ;

bjam --name="projectname"
で実行時にターゲットを生成するルールhoge
これで使い捨てのコードをeditorのマクロで一発テストできるぞ!!

boost-jamって各種コンパイラ用のプリセットがある点以外はかなり貧弱にみえるけど
そうでもないの?皆使ってる??
504503:2008/02/13(水) 00:07:56
ごめん上のコードは忘れて
保存して忘れた頃に晒すとかしないでね


>>500
boost/algorithm/string/find.hpp内でusing boost::algorithm::findしているのが原因
ってのはわかるけど
解決策は「どちらか一方だけを使う」ぐらいしか思いつかない
でもまぁ捨てるとしたらrange_exの方かな…
同じようなものにovenがあるし
505500:2008/02/13(水) 02:20:01
うわ本当だ。
boost名前空間へ引きづり出されているとは、知りませんでしたOTL。
問題のところは、std::findへ逃げました。
506デフォルトの名無しさん:2008/02/15(金) 12:35:34
>>503
cmakeとどっちが便利なんだろう
cmakeはドキュメントそろってるけどbjamにはない
507デフォルトの名無しさん:2008/02/15(金) 16:47:32
autotoolsじゃないと使いたくない
508デフォルトの名無しさん:2008/02/15(金) 16:52:47
scons
509デフォルトの名無しさん:2008/02/17(日) 21:20:32
http://www.nazystyle.net/boost/install_and_build.shtml
boost 1.341をダウンロードしてここを参考にしてコンパイルしたけど、
D:\Documents and Settings\habu\デスクトップ\boost_1_34_1\tools\build\v2/kernel/bootstrap.jam:82: in boost-build
IMPORT error: rule "import" unknown in module "modules."
D:\Documents and Settings\habu\デスクトップ\boost_1_34_1\boost-build.jam:9: in module scope
と言うエラーが出て先に進めません。
根本的に何か間違っているのでしょうか?

仕方ないので今は渋々インクルードファイルだけを使っていますが・・・。
510デフォルトの名無しさん:2008/02/17(日) 21:22:54
すいません。環境書き忘れました。
Visual C++6.0でWindows XPで動作させています。
511デフォルトの名無しさん:2008/02/17(日) 21:26:33
vc6だと使えないのが多い罠
512デフォルトの名無しさん:2008/02/17(日) 21:32:59
ユーザ名くらい隠そうよ
513デフォルトの名無しさん:2008/02/17(日) 21:43:10
>512
しまった・・・・まあいいや、本名じゃないし。
514デフォルトの名無しさん:2008/02/18(月) 02:22:56
g++4.1.2 boost1.35.1-5 で boost::algorithm::trim なんだけど

vector<string> vecstr; に適当に値を代入して

trim( vecstr[0] );
だとダメ(trim.hpp:229 で no much function.)で
trim( vecstr.at(0) );
もダメだけど

string tmp =vecstr[0];
trim( tmp );
だと通ってしまう。これらってC++的には同じでないの?
(atは領域外だと例外投げるとかをのぞいて)
515514:2008/02/18(月) 02:26:57
すみません。vecstrにconst付けてました。サーセン。
516デフォルトの名無しさん:2008/02/18(月) 08:38:52
>>514
それ以前に、trim(& vecstr[0])じゃないのか?
517デフォルトの名無しさん:2008/02/18(月) 11:33:21
ヘッダファイルに次のように書いて
public:
typedef boost::multi_array<double, 2> MyArray;

ある関数の中で

ある関数(){
int Arraylen

Ararylen=3

MyArray A( boost::extents[4],[Arraylen]);

}

とした場合Aと言う変数がこの関数の中で作られているので
どうグローバル化していいか分かりません。
ちなみに、この例ではArraylenの値がすぐ分かるように
なっていますが、自分のプログラムではこの値はその関数内
でしか分かりません。
518デフォルトの名無しさん:2008/02/18(月) 12:43:19
public:
typedef boost::multi_array<double, 2> ;
MyArray A;


ある関数(){
int Arraylen

Ararylen=3

A( boost::extents[4],[Arraylen]);

}

こうやってもダメでしたね。
519デフォルトの名無しさん:2008/02/18(月) 12:46:13
>518
じゃなくて、こうしたらだめでしたね。
520デフォルトの名無しさん:2008/02/18(月) 12:47:32
>518
間違えました。
typedef boost::multi_array<double, 2> MyArray ;
です。
521デフォルトの名無しさん:2008/02/18(月) 12:54:54
他にもつっこみどころが
522デフォルトの名無しさん:2008/02/18(月) 14:36:49
>521
つっこんでよ。
523デフォルトの名無しさん:2008/02/18(月) 14:40:21
>522
細かい文法 ;が無いとか以外に。
引数で渡したら二度手間だしなるべくやりたくありません。
524デフォルトの名無しさん:2008/02/18(月) 16:02:41
ようするにAをPublic変数みたいな感じに
使えないかと。
525デフォルトの名無しさん:2008/02/18(月) 16:50:14
public:
int arraylen;
typedef boost::multi_array<double, 2> MyArray;
MyArray A( boost::extents[4][arraylen]);

こうやってもだめですね。
526デフォルトの名無しさん:2008/02/18(月) 16:53:00
>525
ちなみに、
class CxxDoc : public CDocumen
{
......

等は省略しています。
527デフォルトの名無しさん:2008/02/18(月) 19:21:13
public:
boost::multi_array<double, 2> MyArray;



ある関数(){
int Arraylen;

Ararylen=3;

MyArray ( boost::extents[4],[Arraylen]);

}
これでもダメだったので、
public::
std::vector< boost::array<double,4> > MyArray;
int Arraylen;

Ararylen=3;

MyArray.resize(Arraylen);

}
としました。
もっといいやり方があったらお願いします。
528デフォルトの名無しさん:2008/02/18(月) 19:22:58
>>518
デフォルトコンストラクタで空のmulti_arrayを作っておいて、
関数内でmulti_array::resizeを使えばいいんじゃ?

public:
typedef boost::multi_array<double, 2>;
MyArray A;

ある関数() {
  int Arraylen;
  Ararylen=3;
  A.resize(boost::extents[4],[Arraylen]);
}
529デフォルトの名無しさん:2008/02/18(月) 22:17:38
>528
ああ、まさにそれです。
ありがとうございます。
boost自体をまだ勉強しないとダメですね。
530デフォルトの名無しさん:2008/02/18(月) 22:33:30
VC6でboostのヘッダだけ入れてる状態で、boost::array等を使うと
warningエラーが出ますが、正常に動いています。
気にしなくても大丈夫でしょうか?
また、boostをきちんとビルドして入れると違いますか?
ビルドがうまくいかないもので比較ができません・・・。
531デフォルトの名無しさん:2008/02/18(月) 22:53:38
warningエラー
532デフォルトの名無しさん:2008/02/18(月) 23:03:44
http://d.hatena.ne.jp/kaz_kushima/

現在の最新版(Ver 1.34.1)ではVC6はサポート対象外になった…という噂を聞いたので試していない。

初心者には厳しすぎる事実・・・。
533デフォルトの名無しさん:2008/02/18(月) 23:08:35
>532
VC2005EEか2008EE入れればすむ話なのでは
534デフォルトの名無しさん:2008/02/18(月) 23:17:26
>533
NET Frameworkを入れたくないんです・・・。
一度入れたけど、すごくXPが重くなった。
それにバカだからMFCのAPPWizardが無いとちょっときつい。
535デフォルトの名無しさん:2008/02/18(月) 23:42:38
>530
どうやらデスクトップでコマンドプロンプトを使うと、名前が長すぎるか、
それとも日本語に対応していないか?でうまくコンパイルができないみたい。
C:\にしたら問題有りませんでした。
536デフォルトの名無しさん:2008/02/18(月) 23:53:51
>530は『VC6はC++じゃない』ということを理解すべき。
素直にVisual Studio Standard Edition 買った方がいいんじゃない?
2008にするかどうかは悩ましいところだけど。
わざわざ使い物にならないバッドノウハウの世界に突っ込むこともないと思う。
537デフォルトの名無しさん:2008/02/19(火) 00:18:41
>536
わざわざ新しい物買うの?
欲しいのは山々だけどお金が・・・。
Enterprise買ったの失敗だったかな?
MFCに捨てたらほとんどWin32APIの世界で
やらないといけないようなイメージがあって
辛い。
538デフォルトの名無しさん:2008/02/19(火) 01:00:50
>>537
VC6自体というかVC6のC++コンパイラな。だめなのは。
というか、コンパイラだけなら今のSDKのやつが使えないかね。
539デフォルトの名無しさん:2008/02/19(火) 01:05:24
ExpressEditionならタダだろ
540デフォルトの名無しさん:2008/02/19(火) 01:10:12
>538
そうですか?
失礼しました。
ところでlibsのなかにいろいろとできているのですが、ライブラリの拡張子が
何か教えてください。
541デフォルトの名無しさん:2008/02/19(火) 01:11:38
>539
ExpressEditionでALTを使ってやっているんですかみなさん?
542デフォルトの名無しさん:2008/02/19(火) 01:11:58
>537
自分から泥沼にはまるつもりなら止めはしないけど。
まあ、アップグレードでも2万円するしね。

そういや、前のバージョンならExpressEditionからもアップグレードできるのね。知らんかった。
543デフォルトの名無しさん:2008/02/19(火) 01:17:49
なぜいきなりATL(だよな?)の話が
544デフォルトの名無しさん:2008/02/19(火) 01:43:15
>542
NETFRAMEWORKいれるの覚悟でなんとかやってみる。
まずはフリーから。
545デフォルトの名無しさん:2008/02/19(火) 01:59:30
ELTは良い曲だすよね
546デフォルトの名無しさん:2008/02/19(火) 02:04:43
よくキーボードマニアでやったなぁ>ELT
547デフォルトの名無しさん:2008/02/19(火) 08:16:22
MFCを捨ててWTLをやってみないか。
548デフォルトの名無しさん:2008/02/19(火) 08:23:30
>>537
MFCのことはさっさと忘れろ
VC2005の無料版でboost+wxWidgetsで幸せになろうぜ
549デフォルトの名無しさん:2008/02/19(火) 09:44:05
GUIはC#で書いて、マネージ/アンマネージ間をC++/CLIで橋渡しする。
550デフォルトの名無しさん:2008/02/19(火) 11:07:10
GUIはguile-gtk
551デフォルトの名無しさん:2008/02/19(火) 15:02:48
そういや、Boost GUI ってどうなったんだろ
552デフォルトの名無しさん:2008/02/19(火) 17:58:19
Boost.Actもどこいったのやら
553デフォルトの名無しさん:2008/02/19(火) 18:03:11
Boost で GUI ってまさか GUI Buider?
全然似合わないけど。
554デフォルトの名無しさん:2008/02/19(火) 18:16:43
Boost 1.35ってどこで入手すればいいですか?
555デフォルトの名無しさん:2008/02/20(水) 00:37:54
svn
556デフォルトの名無しさん:2008/02/20(水) 10:16:18
>>549
C++/CLIだとC#からダイレクトに橋渡しするより楽なん?
557デフォルトの名無しさん:2008/02/20(水) 10:17:51
橋渡しは、WinDNAの悲劇の再来。
558デフォルトの名無しさん:2008/02/20(水) 14:07:07
>>556
クラスとかC++の機能を使ったライブラリが難なく取り込めたり、
<windows.h>ほか多数のヘッダが存在するから
関数プロトタイプをいちいち調べて書かなくてよかったりする。
559デフォルトの名無しさん:2008/02/21(木) 00:06:52
Boostをsvnから取ってきて数日たったあとsvn更新するとけっこう変更ファイルあるみたいなんだけど、
みんなはどのタイミングのをビルドしてる?
560デフォルトの名無しさん:2008/02/21(木) 07:52:59
自分が使うライブラリが更新された時。
あとは気が向いたら。
ビルドしたものは全部残しているから何か挙動がおかしければ
自分のプログラムのユニットテストで引っ掛かるからすぐ戻す。
いままで戻したことは無いけど。
ユニットテストは特にフレームワークを使っている訳じゃなくて
単にアサーションの連続だけど。
561デフォルトの名無しさん:2008/02/21(木) 14:18:47
Boostの正規表現で(?<!)や(?<=)は使えますか?
562デフォルトの名無しさん:2008/02/21(木) 16:42:20
regexでもxpressiveでも使えたはず。
563デフォルトの名無しさん:2008/02/21(木) 23:57:33
>>562
boost::regexpを利用したテストツールらしいのですが、
ttp://www.vector.co.jp/soft/winnt/util/se385428.html
(?<=)が使えなかったので。
このソフト固有の問題ですかね
564デフォルトの名無しさん:2008/02/22(金) 00:14:29
boost のドキュメント見ればサポートしている表現は書いてあるだろ
565デフォルトの名無しさん:2008/02/22(金) 01:34:09
enable_shared_from_this
は1クラスしか対応してない?

class MyName
:public IClass
,public IName
,boost::enable_shared_from_this<IClass>
,boost::enable_shared_from_this<IName>
{
public:
virtual boost::shared_ptr<IClass> get_class()
{
return shared_from_this();
}
virtual boost::shared_ptr<IName> get_name()
{
return shared_from_this();
}
};
566デフォルトの名無しさん:2008/02/22(金) 01:42:23
エラーになる理由はpublic継承でないからに見えるけど、そもそも単にこうでいいと思う。
class MyName
:public IClass
,public IName
,boost::enable_shared_from_this<MyName>
{
public:
virtual boost::shared_ptr<IClass> get_class()
{
return shared_from_this();
}
virtual boost::shared_ptr<IName> get_name()
{
return shared_from_this();
}
};
T*からU*へ暗黙の変換が可能なら、shared_ptr<T>からshared_ptr<U>への暗黙の変換も可能。
567デフォルトの名無しさん:2008/02/22(金) 01:42:46
って俺もpublicにしていないしorz
568565:2008/02/22(金) 02:09:54
コンパイルは通るけど実行すると
bad_weak_ptr飛んでくる
569デフォルトの名無しさん:2008/02/22(金) 02:20:29
まさかとは思うけど、shared_ptrに入れていないMyNameインスタンスに対して
get_classやget_nameを呼んでいるなんてことはないよね?
570565:2008/02/22(金) 02:28:38
>>569
そういうことかああー
ありがとう。
571デフォルトの名無しさん:2008/02/22(金) 02:40:49
みんなBoost v1.35をsvnから取ってきて自前でコンパイルしてるのですか?
572デフォルトの名無しさん:2008/02/22(金) 02:55:00
みんなって言われても俺一人じゃ答えられない(><)
573デフォルトの名無しさん:2008/02/22(金) 02:59:54
最近あちこちでウザいアンケート多すぎ
574デフォルトの名無しさん:2008/02/22(金) 03:05:35
>>206使ってるんじゃないの?
575デフォルトの名無しさん:2008/02/22(金) 16:34:29
ウザくてごめんなさい
もう消えます・・・
576デフォルトの名無しさん:2008/02/22(金) 17:10:02
最近同じやり取りが>>559-560でされてるから煽られても仕方ない。
消える必要までは感じないが、過去レスを見てから、死ぬがよい。
577デフォルトの名無しさん:2008/02/22(金) 17:43:18
色々過去ログを見てきたので消えます。
皆さん達者で
578デフォルトの名無しさん:2008/02/22(金) 18:43:17
boost::bindでstdcallな関数使う場合はBOOST_BIND_ENABLE_STDCALLを定義すればいいんだけど、
lambda::bindでstdcallな関数を使いたい場合は方法ってあるんでしょうか。
VC++2008です。

vector<ATL::CString> v; ってのを使ってて大文字小文字無視ソートがしたくて、

 sort(v.begin(), v.end(), boost::lambda::bind(lstrcmpi, _1, _2) < 0);

これだとエラー。cdeclなCRT関数使うと動く…

 sort(v.begin(), v.end(), boost::lambda::bind(_tcsicmp, _1, _2) < 0);

もちろん大文字小文字を無視しないソートするだけなら

 sort(v.begin(), v.end(), _1 < _2);

なんだけど…
579デフォルトの名無しさん:2008/02/23(土) 17:09:40
boost::Poolライブラリ使ってる人いる?
ちょっと使ってみたら、確かにデフォルトnew、deleteより
全然速かったんだけど、手放せないという人いる?
580デフォルトの名無しさん:2008/02/23(土) 17:42:29
コピーすると自動的にディープコピーになる
boost::scoped_ptr の変種って便利じゃね?
581デフォルトの名無しさん:2008/02/23(土) 18:14:53
「ディープコピー」の振舞いを決めるのが難しい。
普通にコピーコンストラクタ組むのとあんまり手間変わらんし。
582デフォルトの名無しさん:2008/02/23(土) 18:17:45
難しい?コピーコンストラクタを呼ぶだけじゃないか?
>>580は要するに最大sizeが1のvectorだから、設計上の困難はなさそうだけど
583デフォルトの名無しさん:2008/02/23(土) 18:27:10
深い構造体は同値性一つ取っても、
多種多様な意味付け方があるし、コピーだって同じだよ。

Lispみたいにメモリ管理については無視していい言語でさえ、
同値性は4つの述語関数がある。

>>581はそういうこと言っていると思う。

まあどれか決め撃ちで作ったり、
テンプレートでコンパイル時に選べるのを作るのは面白いと思う。
584デフォルトの名無しさん:2008/02/23(土) 18:41:17
>>583
その色んな意味付けから一つ選んでコピーコンストラクタの振る舞いを決めるのがC++のやりかたじゃないか?
実際にコピーを行う側は盲目的にコピーコンストラクタを呼んで、実際にどこまで深くコピーするかはコピーコンストラクタが決める

同様に、C++には標準的な同値性は二種類しかない
オブジェクトとしての同一性と、operator==
585581:2008/02/23(土) 18:59:10
>580 >584
むむむ?なんかハッキリしないなぁ
値の振舞いとの違いは何?boost::scoped_ptrに何を期待してるの?
586デフォルトの名無しさん:2008/02/23(土) 19:04:58
optional使えよ
587584:2008/02/23(土) 19:05:26
>>585
俺は>>580じゃないよ
値との違いは、NULLになり得るとか、resetが使えるとか、コピーなしでswapできるとか、そんなんじゃね
588581:2008/02/23(土) 19:58:46
>587
その程度だと「boost::any使ってみたら?」でお仕舞いだなあ。
多態は使えんけど。
589デフォルトの名無しさん:2008/02/23(土) 20:02:38
class A {
...
scoped_ptr<B> p;
...
};

A a;

で,p の指している先のオブジェクトに dereference するには
*(a->p) って書くと思うんですが。a->p まで書いていちいち
前に戻って *( って書くしかないですかね。
左から右に自然と書きたければ a->p.operator*() とか?
590デフォルトの名無しさん:2008/02/23(土) 20:04:51
あ、ごめん、A a じゃなくて A *a と読みかえてください。
591デフォルトの名無しさん:2008/02/23(土) 20:14:30
普通に最初から * ( と書き始めればいい。
592デフォルトの名無しさん:2008/02/23(土) 20:20:28
なんで括弧使うの?
593デフォルトの名無しさん:2008/02/23(土) 20:24:05
内部データの「ハンドル」を返え、
あ、いや、なんでもないです。。。
594デフォルトの名無しさん:2008/02/23(土) 20:24:14
あれ?優先度間違って覚えてる?俺。
595デフォルトの名無しさん:2008/02/23(土) 20:34:30
あっても無害だけど不要。
596デフォルトの名無しさん:2008/02/23(土) 20:41:29
*a->p; だとまず * は a に作用するんだと思ってた。
先に -> が働いてから * が働くのか。
597デフォルトの名無しさん:2008/02/23(土) 22:30:58
boostやるんだったら、暗記しなくてもいいから演算子の優先順位表くらいはすぐに出せるようにしておこうな。
598デフォルトの名無しさん:2008/02/23(土) 22:35:48
分かってても俺なら括弧つけるね。
599デフォルトの名無しさん:2008/02/23(土) 22:53:07
おれも括弧つけるね。
言語ごとに演算子の優先順位が違ったりするし。
600デフォルトの名無しさん:2008/02/23(土) 22:53:08
他人が読む可能性のあるコードにはオレも括弧つけるな
601デフォルトの名無しさん:2008/02/23(土) 23:12:00
俺もカッコつけたら動いたからつけてる
602デフォルトの名無しさん:2008/02/23(土) 23:17:07
おまえらカッコばかりつけやがって
603デフォルトの名無しさん:2008/02/23(土) 23:43:11
どうせコンパイラが最適化するんだから、ワークの変数にして短い変数で使う。
604デフォルトの名無しさん:2008/02/24(日) 02:10:18
*a->bと*a++は定型句に近いと思うんだが
605デフォルトの名無しさん:2008/02/24(日) 03:23:54
ここで*++aの出番だな
606デフォルトの名無しさん:2008/02/24(日) 06:23:10
intrusive_ptr にはなぜ reset() が無いんだろう
shared_ptr のノリで書いてるとついつい reset で代入しようとしてしまう
607デフォルトの名無しさん:2008/02/24(日) 10:45:24
俺は reset できない scoped_ptr が欲しいのだが.
単に reset しなけりゃいいじゃんといわれればそれまでだけど.
608デフォルトの名無しさん:2008/02/24(日) 11:21:25
resetのないインターフェースをscoped_ptrで実装
609デフォルトの名無しさん:2008/02/24(日) 11:58:03
resetをprivateにして継承する
610デフォルトの名無しさん:2008/02/24(日) 12:14:18
class A {
std::scoped_ptr<X> pX;
A : pX(new X) {}
}

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

>>615
pythonドキュメントのapi.pdf参照
629デフォルトの名無しさん:2008/02/25(月) 18:41:59
boost::serializationを使ってXMLを出力してみたのですが
日本語を出力すると文字コードがすべてSJISになってしまっています。
しかし、XMLにはUTF-8との記述があり、正常なXMLにはなっていません。
内部ではwchar_t使っているので、できればUnicodeで処理したいのですが
そのようにするにはどうしたらいいでしょうか?
630デフォルトの名無しさん:2008/02/25(月) 18:48:14
woarchive使ったらとりあえず、全部UTF-8で処理してくれたので
それでいろいろやってみます。
631デフォルトの名無しさん:2008/02/25(月) 18:58:51
632デフォルトの名無しさん:2008/02/25(月) 19:15:09
ありがとうございます。
見て回ります。
633デフォルトの名無しさん:2008/03/01(土) 18:20:28
634デフォルトの名無しさん:2008/03/01(土) 22:33:36
コンパイラの対応表ってどこでしたっけ?
635デフォルトの名無しさん:2008/03/01(土) 22:50:27
ttp://beta.boost.org/development/tests/trunk/developer/summary.html
1.35も大分安定してきたみたいだね
636デフォルトの名無しさん:2008/03/01(土) 23:06:50
さんくす
637デフォルトの名無しさん: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)
ってないの?作って良い?
638デフォルトの名無しさん: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を以下のように書いたのですが、
うまく行きません。

639デフォルトの名無しさん: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に書いたつもりなのですが・・・

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

C++のソースも少しだけ公開されてたんだが特にboostばりばりって感じでもなかったな。
どちらかというと昔から見るような大クラス主義のC++。
643デフォルトの名無しさん:2008/03/02(日) 12:38:50
>642
ソースみたいです。
インターネットで公開しているんですか?
644デフォルトの名無しさん:2008/03/02(日) 12:44:19
>>642
そういう使い方もできるのか
組み込みというとLuaしか思い浮かばなかったがちょっと調べてみる
645643:2008/03/02(日) 12:45:47
すいません。ありました。
http://www.gamershell.com/download_13312.shtml
646デフォルトの名無しさん: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
647デフォルトの名無しさん:2008/03/02(日) 14:06:03
>>646
--
.cpp.o :
 $(CC) -Wall -g -c $< -o $@
--
どう見ても、OPTION渡してないじゃん。
スレ違いだからこれ以上ここで質問するなよ。
648デフォルトの名無しさん:2008/03/02(日) 14:52:02
>>678
ありがとうございました。
スレ違い申し訳ないです。
649デフォルトの名無しさん:2008/03/03(月) 08:19:41
>>678 に期待。
650デフォルトの名無しさん:2008/03/03(月) 15:11:45
boost導入してみたんだけど、何か便利に使えないかと思って
Windowsのコンテナ系コントロール(リストボックス、コンボボックス、
リストビュー類)用のイテレータを定義してみた。

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

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

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

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

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

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

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



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

boost.xml的なものが欲しいっていうのは激しく同意。
SAX的なものはexpatで十分に事足りるから、C++に親和性の高いDOM的なものが欲しい。 あとpull-parser。
現状DOMってどう見てもJava用に設計されました、って感じでC++の実装は無理矢理感が漂うし。
699デフォルトの名無しさん:2008/03/06(木) 18:02:13
.NET の XmlReader とかににたやつ?
700デフォルトの名無しさん:2008/03/06(木) 22:29:16
たいていUTF8で扱われるXMLはテンプレートでパラメタライズする必然性を感じない。
個人的にはspiritもテンプレートで提供しているから使いにくいと感じる。
701デフォルトの名無しさん:2008/03/07(金) 00:03:49
なんで突然テンプレート?
702デフォルトの名無しさん:2008/03/07(金) 03:06:15
俺の中ではspiritは神
703デフォルトの名無しさん:2008/03/07(金) 03:09:29
神というか一生かかっても俺には作れない自信がある
704デフォルトの名無しさん:2008/03/07(金) 04:50:33
俺なんか使うだけでも一苦労・・・
705デフォルトの名無しさん:2008/03/07(金) 06:48:40
初めてspirit使った時は文字通り感動した
地獄の構文解析がこんな簡単に…
706デフォルトの名無しさん:2008/03/07(金) 08:04:54
>>702
PCの時代で本当によかった、これがCPUタイム課金時代だったら涙目
707デフォルトの名無しさん:2008/03/07(金) 10:00:23
その時代にあんな変態じみた expression template を受け付けるコンパイラはなかろうよ
708デフォルトの名無しさん:2008/03/07(金) 11:01:24
xpressive ってこの一カ月くらい更新激しいね.
709デフォルトの名無しさん:2008/03/07(金) 23:18:56
spirit大変すぎるだろ。
lemonとか使ったほうがずっと簡単。
710デフォルトの名無しさん:2008/03/07(金) 23:55:09
boostの各ライブラリのthread safetyについてまとまった文書とかない?
マルチスレッド環境でboost::random使いたいんだけど、
スレッドごとに用意するべきなのかな。
711デフォルトの名無しさん:2008/03/08(土) 08:53:33
>>707
LISP(大文字w)のマクロで同じことやった人ならいるかも。
712デフォルトの名無しさん:2008/03/08(土) 12:07:23
Common Lispのloopマクロは、2,30年前だと考えるとちょっと狂ってるね。
Templateは元々Cの変態記号的な演算子をオーバーロードできるから、
Common Lispだとread tableまで駆使しているのに相当するけど。
713デフォルトの名無しさん:2008/03/09(日) 16:30:55
正規表現ライブラリなどは boost を便利に使わせてもらってます。
ところで boost python をインストールするためには何を
準備しておかなければならないのでしょうか?
Linux だと apt-get とか yum でサクッと入るのでしょうけど、
Windows だとそもそも python 処理系をあらかじめ入れておかねば
ならんのでしょうか?当たり前だろ!といわれるかもしれませんが、
Windows での python 処理系って cygwin のやつしか使ったことが
ないもんで・・・
714デフォルトの名無しさん:2008/03/09(日) 16:44:24
当たり前だろ!
715デフォルトの名無しさん:2008/03/09(日) 16:50:57
>>714
おれも書こうとしたが、真剣に質問してたら悪いなと思って自重したんだ。
716デフォルトの名無しさん:2008/03/09(日) 16:56:26
すまん!真剣だったんだが・・・
ActivePython とか日本のユーザー会のPythonとかもあって、
boost.python ビルドするのに相性のいいのはどれよ、
てかもしかしてヘッダだけでいいんかね?
ってことを聞きたかったんだ!
717デフォルトの名無しさん:2008/03/09(日) 20:55:18
>>716
日本のではなく本家のサイトがおすすめ
718デフォルトの名無しさん:2008/03/10(月) 15:22:20
cmakeでFindBoostすれば自動でインクルードパスみっけてくれるから
719デフォルトの名無しさん:2008/03/10(月) 15:24:49
今ならそれこそLua使ったほうがいんでね?好みの問題か。
boost本家ではないがboost使ったluabindってのがある
720デフォルトの名無しさん:2008/03/10(月) 15:30:23
おまいらのレベルになると、q2chwmをビルドするのも楽勝なんでしょ?
721デフォルトの名無しさん:2008/03/12(水) 01:05:49
何それ?
722デフォルトの名無しさん:2008/03/12(水) 01:22:04
WM用の2ちゃんねるブラウザです。
q2chというりなざう用ブラウザの派生版
723デフォルトの名無しさん:2008/03/12(水) 11:20:24
なんでそれをここで
724デフォルトの名無しさん:2008/03/12(水) 12:33:03
向こうでも言ったけど、凄腕だらけだと判断したから
725デフォルトの名無しさん:2008/03/12(水) 12:47:28
WMと言われてもlightweight_mutex.hppくらいしか思いつかん

726デフォルトの名無しさん:2008/03/12(水) 12:51:00
まぁ結論だけ言うとスレ違い死ねよってとこかな。
727デフォルトの名無しさん:2008/03/12(水) 12:55:59
そんなこといわないで
728デフォルトの名無しさん:2008/03/12(水) 13:05:44
そもそも何が難しいのか理解できん
SSL周りで必要なファイルが多いだけでは
729デフォルトの名無しさん:2008/03/12(水) 16:04:14
http://d.hatena.ne.jp/niitsuma/20080311
cmakeの日本語解説がなかったので作りました
730デフォルトの名無しさん:2008/03/12(水) 16:31:02
新妻さんありがとう
731デフォルトの名無しさん:2008/03/12(水) 19:54:41
でも死ね
732デフォルトの名無しさん:2008/03/13(木) 00:38:58
便利そうだね,新妻さんありがとう

でも宣伝乙
733デフォルトの名無しさん:2008/03/13(木) 04:43:04
新妻・・・ハァハァ
734デフォルトの名無しさん:2008/03/13(木) 06:00:10
オマンコがオマンコを呼ぶ怒涛の展開
735デフォルトの名無しさん:2008/03/13(木) 06:00:24
間違えた orz
736デフォルトの名無しさん:2008/03/13(木) 08:11:04
おまいはガチで面白い
737デフォルトの名無しさん:2008/03/13(木) 11:12:10
でも死ね
738デフォルトの名無しさん:2008/03/13(木) 20:36:21
死なばもろとも
739デフォルトの名無しさん:2008/03/14(金) 00:19:50
死なばもろとも…? C++とBoostのことか… C++とBoostのことかーーーっ!!!
740デフォルトの名無しさん:2008/03/14(金) 00:23:06
いえ、valarrayとprogress_displayです
741デフォルトの名無しさん:2008/03/14(金) 01:13:57
あとvector<bool>もだな
742デフォルトの名無しさん:2008/03/14(金) 13:58:53
progress_displayなんて誰かorどっかの著名アプリで使ってるのか?
743デフォルトの名無しさん:2008/03/14(金) 14:54:03
著名アプリで使われることが全てではないだろうて。



だからといってprogress_displayが使えるとかそういう話でもないがな。
744progress_display:2008/03/14(金) 15:25:19
(´;ω;`)ブワッ
745デフォルトの名無しさん:2008/03/14(金) 16:33:23
なんでプログレスバーをそんなに叩くんだよ。
746デフォルトの名無しさん:2008/03/14(金) 17:04:30
boost.pythonって単純な型の変数しか扱わない関数呼び出しをラップしてくれるだけだよね。
決してクラスまで面倒見てくれる訳じゃ無いよね?
747デフォルトの名無しさん:2008/03/14(金) 17:25:57
748progress_display:2008/03/14(金) 22:21:34
(´;ω;`)おっおっううぇああぁああぅぅおぉぉおお
749デフォルトの名無しさん:2008/03/14(金) 22:24:35
GUIでも使える位汎用性があればまだ使い道があったのに
750progress_display:2008/03/14(金) 22:27:29
(´;ω;`)おっおっううぇああぁああぅぅおぉぉおお
751デフォルトの名無しさん:2008/03/15(土) 14:04:49
今のvector<bool>はいらない子だが
C++0xならコンテナの要件を満たした実装ができそうなうな気がする。
スレ違ったすまん
752progress_display:2008/03/15(土) 14:18:33
( ^,_ゝ^)ニコッ
753デフォルトの名無しさん:2008/03/15(土) 14:26:12
>>751
フサフサはdeque<bool>でいいと言ってるだろ。
754デフォルトの名無しさん:2008/03/15(土) 14:47:15
どっかの外人開発者のブログで「vectorはいらない子、dequeを使おう」っていうデータが出てなかったか?
あらゆるパフォーマンスでvectorよりも平均的に優れているdeque。
755デフォルトの名無しさん:2008/03/15(土) 14:48:49
さすがにそれはないw
756デフォルトの名無しさん:2008/03/15(土) 14:52:09
レガシーAPIとやりとりするのに必要
757デフォルトの名無しさん:2008/03/15(土) 14:58:36
ずっとデキューだと思ってた。
デックと言われたとき軽くショック受けて3日ほど寝込んだわ。
758デフォルトの名無しさん:2008/03/15(土) 14:59:32
>>757
ディーク
759デフォルトの名無しさん:2008/03/15(土) 15:13:47
deckとひっかけて、あえてそう読める綴りにしたんだよね。
でも/dek/と発音しなくちゃいけない決まりは無い
760デフォルトの名無しさん:2008/03/15(土) 22:30:16
>>754
つい先日、どっかのスレにリンク貼られてたね。
でも「あらゆるパフォーマンスで」っていう話ではなく、
「皆が思っている以上にdequeが勝っている項目が多い(から、dequeを軽視するのはやめよう)」
という話だったかと。
761デフォルトの名無しさん:2008/03/15(土) 22:32:46
「とりあえずvector使っとけばいいってもんじゃない」ぐらいの趣旨かと
762デフォルトの名無しさん:2008/03/15(土) 22:34:17
>>760
「要素の連続性保証がいらないならdequeにしとけ〜」じゃなかった?
763デフォルトの名無しさん:2008/03/15(土) 22:34:57
deque は間に挿入しないのであれば
メモリの最確保が起こってもコピーが発生しないからな。
あれは凄い利点だと思う。
764デフォルトの名無しさん:2008/03/15(土) 22:47:11
ギャップ付きベクタを一般化したような感じだよな
765デフォルトの名無しさん:2008/03/15(土) 22:47:52
Stackなどの補助コンテナはデフォルトでdequeを使ってるという事実。
766デフォルトの名無しさん:2008/03/15(土) 22:59:45
そりゃそうだろ
両端キューなんだからスタック・キューの実装に不向きなわけが無い
767デフォルトの名無しさん:2008/03/15(土) 23:03:27
まあオーバースペック感はあるが。
768デフォルトの名無しさん:2008/03/15(土) 23:10:40
>>766
ウフフフ
769デフォルトの名無しさん:2008/03/15(土) 23:10:56
dequeはランダムアクセスに弱いし、
vectorに比べるとメモリ効率も悪い。

>>763
間に挿入してもコピーは発生しない。
770デフォルトの名無しさん:2008/03/15(土) 23:15:43
>>769
間に挿入してコピー発生しなかったらそれはリストなんだぜ。
deque の挿入で O(1) なのは両端の挿入だけ。
771デフォルトの名無しさん:2008/03/15(土) 23:23:19
間に挿入してもコピーが発生しないようなdequeは書こうと思えば書けるのでは?
772デフォルトの名無しさん:2008/03/15(土) 23:26:54
>753
横浜優勝スレの人?

>757
P.J.Plaugerさんによると、デックかディーキュー(ディーイーキュー)と読めだそうな。
773デフォルトの名無しさん:2008/03/15(土) 23:28:14
>>771
ランダムアクセスがかなり複雑になりそうな・・・。
774デフォルトの名無しさん:2008/03/15(土) 23:30:52
ランダムアクセスと途中への挿入・削除を高速にしたい場合はどのコンテナを使ったらいいですか?
775デフォルトの名無しさん:2008/03/15(土) 23:34:17
木構造を使えば全操作を O(log N) で行えるようにはできる。
776デフォルトの名無しさん:2008/03/15(土) 23:35:00
裏を返せば、O(1) でできる操作がないってことだが。
まあ、サイズ取得くらいは O(1) で可能だけども。
777デフォルトの名無しさん:2008/03/16(日) 00:07:32
>>774
map
778デフォルトの名無しさん:2008/03/16(日) 00:08:36
std::map の operator[] はランダムアクセスとはちょっと違うよな・・・。
779デフォルトの名無しさん:2008/03/16(日) 01:08:38
Boost 1.34.1のuBlasを使っています。
matrixの要素をすべて列挙したいのですがどのようにすればいいですか?
できるだけシンプルな方法が知りたいです。
780デフォルトの名無しさん:2008/03/16(日) 02:04:47
781デフォルトの名無しさん:2008/03/16(日) 02:22:51
>>779
ublas::matrix<T> m;

for (std::size_t i = 0; i < m.size1(); ++i) {
    for (std::size_t j = 0; j < m.size2(); ++j) {
        m(i, j);
    }
}
782デフォルトの名無しさん:2008/03/16(日) 02:28:42
ありがとうございます。
やはりインデックスを使わないと無理でしょうか。

述語Pの成り立つ要素をカウントしたくて

int c = std::count_if( [first, last] , P);

みたく1行で書きたかったのですが。
783782:2008/03/16(日) 02:30:40
[first, last]
じゃなくて
[first, last)
です。すみません
784デフォルトの名無しさん:2008/03/16(日) 02:48:48
イテレータを作ればいじゃない
785デフォルトの名無しさん:2008/03/16(日) 03:37:48
ありがとうございます。
イテレータを作ってみたら結果的には長くなってしまいましたが望み通り動きになりました。
786デフォルトの名無しさん:2008/03/16(日) 08:21:41
>>769
間に挿入してもコピーは発生しない。

規格では、こんなこと言ってない。どこに挿入しようが
メモリのreallocationは起こりうるというふうに考えて
おかないといけない。
787デフォルトの名無しさん:2008/03/16(日) 10:24:54
dequeのランダムアクセス (operator[]() とか at() とか) は
定数時間だったと記憶していたが、俺の記憶違いか?
788デフォルトの名無しさん:2008/03/16(日) 10:27:19
dequeのランダムアクセスはO(1)じゃないなんて意見はでてないよ?
789デフォルトの名無しさん:2008/03/16(日) 10:30:54
std::dequeはそうだね。

dequeはdouble ended queueのことだから、
deque一般には成立しない。
790デフォルトの名無しさん:2008/03/16(日) 10:32:54
>>788
>>769 とか。

>>789
ここまでの deque の話って std::deque の話じゃなかったの?
791788:2008/03/16(日) 10:34:28
あ、ほんとだ
すまんこ
792デフォルトの名無しさん:2008/03/16(日) 10:35:06
俺もstd::dequeの話だと思ってた
793デフォルトの名無しさん:2008/03/16(日) 10:38:33
C++だとlistが、
double linked listで実装されたdequeにそのまま使えるから、
dequeの別の実装はないだろうね。

Javaはdequeはinterfaceで、
list版とarray版の両方の実装がある。
794デフォルトの名無しさん:2008/03/16(日) 11:41:32
テキストエディタ作ってるんだけど、行管理クラスは各行へのランダムアクセスと
途中への挿入・削除処理の高速性が要求される

std::deque はその両方の要求を満たしてるの?
795デフォルトの名無しさん:2008/03/16(日) 11:57:57
>>794
途中への挿入・削除はノードベースコンテナ(std::list std::setなど)よりは遅い。
ランダムアクセスは、一般的にメモリの構造上vectorよりはアクセス速度は落ちる。
でも実害ないなら無視すればよろし。
796デフォルトの名無しさん:2008/03/16(日) 12:16:09
各行へのランダムアクセスって、どういうときに使われるの?
いきなり500行目にジャンプ!とかってあんましないような。
頻繁に行われるであろう検索・置換もシーケンシャルだし。
797デフォルトの名無しさん:2008/03/16(日) 12:21:26
行数指定してジャンプは良く使わないか?
コンパイルエラーを直すときとか
798デフォルトの名無しさん:2008/03/16(日) 12:29:50
たしかにコンパイルエラー直すときは重宝するけど他にもあるかな?
std::deque を使うとランダムアクセスは定数時間だけど、削除とかは線形時間。
例えば1万行のテキストの空行を全て削除、とかいう操作をやるともっさりしそう。(最悪で1万の2乗くらいのオーダー)
std::list の方がいいのでは。
799デフォルトの名無しさん:2008/03/16(日) 12:30:49
テキストエディタは、
・行指向エディタだと、行のダブル・リンクト・リスト
・ギャップ・バッファ
が古典的だね。

>>797
ギャップ・バッファ方式(e.g. Emacs)でもそんな遅くないでしょ。
こっちの方が改行コードを含めた正規表現検索とかやりやすいし。
800デフォルトの名無しさん:2008/03/16(日) 13:24:03
STLコンテナの要件を満たすギャップバッファ式コンテナを作ったことがあったが
なかなかいい勉強になった。
801デフォルトの名無しさん:2008/03/16(日) 14:19:07
うp
802デフォルトの名無しさん:2008/03/16(日) 14:48:32
検索するといくつかあるね
ていうかboost関係ないな
803デフォルトの名無しさん:2008/03/16(日) 14:57:26
Boostにもあればいいって話かな
804デフォルトの名無しさん:2008/03/16(日) 15:02:59
>>800
俺も以前ショボイながら作ったけど、ギャップバッファの実装そのものより、
STLコンテナの要件を満たす条件を調べるのに費やした時間の方が長かったという・・・
805デフォルトの名無しさん:2008/03/16(日) 15:07:35
既存のvectorとかdequeにあわせて戻り値やら関数やら作れば
とりあえず問題なくね?
806デフォルトの名無しさん:2008/03/16(日) 15:33:11
ContainerConceptが通れば問題ないよ
807デフォルトの名無しさん:2008/03/16(日) 17:26:46
>>786
メモリの reallocation とコピーは別問題だよ。

>>790
deque のランダムアクセスは O(M) (M は内部バッファの分割数)。
O(N) よりははるかにマシだが、O(1) ではない。
808デフォルトの名無しさん:2008/03/16(日) 17:29:10
>>807
何見てしゃべってんの?規格じゃないよね?
809デフォルトの名無しさん:2008/03/16(日) 17:31:12
規格じゃない。
具体的に実装すると大抵の場合そうなっちゃうという話。
810デフォルトの名無しさん:2008/03/16(日) 17:36:32
つまり特定の実装に依存する話なわけだ。

途中への挿入で複数要素のコピーが発生する実装も、
ランダムアクセスが O(1) な実装も、規格の範囲で在りうるんだから、
何の前提も書かずに言い切らないでほしい。
811デフォルトの名無しさん:2008/03/16(日) 17:38:19
>>807
別問題じゃないよ。
std::dequeは、挿入・削除は対象以外の全てのリファレンス、ポインタ、イテレーター
を無効にする。リファレンスとポインタは先頭、末尾挿入の場合は有効のまま。
Josuttis本にはこう書いてある。
ということは、reallocationによって要素は移動されることもあるというわけでしょ。
これは初期化あるいは代入は発生しうると考えておくべきということ。
Josuttis本が間違いなら知らん。
812デフォルトの名無しさん:2008/03/16(日) 17:38:48
配列をvectorに変えたら、コンパイラがsseを使わなくなったのだけど
vectorってsse使ってくれないの?
FC8+Intel v10です。
813デフォルトの名無しさん:2008/03/16(日) 17:39:34
安全を考えると当然規格には従っておくべき。
814デフォルトの名無しさん:2008/03/16(日) 17:40:20
スレ違いな話が続いたせいで迷子がでたようだ。
815デフォルトの名無しさん:2008/03/16(日) 17:40:23
>>811
挿入・削除されたから無効になるんだろ。
reallocation が起こらなくても無効になるんだから、
reallocation とは無関係。
816デフォルトの名無しさん:2008/03/16(日) 17:40:25
分かった分かった。
お前はO(N)なソートでも使ってろ。
817デフォルトの名無しさん:2008/03/16(日) 17:42:28
>>807,809
deque のランダムアクセスは償却定数時間じゃないと規格の要件を満たさない。
「内部バッファの分割数」ってのがはっきりしないけど、「O(1) ではない」と言い切れて
しまうような実装は deque とは言えないんじゃないの?
818デフォルトの名無しさん:2008/03/16(日) 17:44:53
>>815
挿入もしないのに勝手にreallocationされんの?
新しい要素のために領域が必要だからreallocationされるんじゃないの?
819デフォルトの名無しさん:2008/03/16(日) 17:45:14
ランダムアクセスが償却定数ってどういうこと?
規格には定数って書いてあるよ
820デフォルトの名無しさん:2008/03/16(日) 17:49:23
>>815
shrinkはされる可能性はあるが、reallocationは必要になったときのみだ。それは
必要な領域拡張のとき。要素の挿入もその可能性は常にある。だから関係はある。
821デフォルトの名無しさん:2008/03/16(日) 17:49:38
>>817
ああ、よく考えたら定数で実装できそうだな。
822デフォルトの名無しさん:2008/03/16(日) 17:49:42
>>819
あれ?そうなの?
"Table 68 - Optional sequence operations" に載ってて、こいつらみんなまとめて
償却定数時間だから、 deque の operator [] もそうだと思ったんだけど。
別のところに書いてあるのか?
823デフォルトの名無しさん:2008/03/16(日) 17:52:04
長くなりそうなら、いいかげんにスレ移動してくれ。
824デフォルトの名無しさん:2008/03/16(日) 17:57:54
>>822
ごめん、俺の勘違い
825デフォルトの名無しさん:2008/03/16(日) 18:02:03
厳密には
先頭と最後の要素へのアクセス速度は同じ。
それ以外には間接レベルが違うから差異があるよ。
Big O記法はよく知らんが、少なくともlogやn^2ではない。
Data Structure AND Algorithm In C++が分かりやすい。
826デフォルトの名無しさん:2008/03/16(日) 18:08:17
この辺で語った方がみんなのためにもなると思うんだ

【C++】STL(Standard Template Library)相談室 9
http://pc11.2ch.net/test/read.cgi/tech/1204045410/
827デフォルトの名無しさん:2008/03/16(日) 18:08:56
>>818
>>>815
端への追加は O(1) で行わないといけないので、
端への追加でメモリを最確保する必要があったとしても、
それまでのデータを新しいメモリにコピーするようなことは行えない。
データの全コピーは O(N) だから。
この場合、メモリの最確保が行われるが、コピーは発生しない。でしょ?
828デフォルトの名無しさん:2008/03/16(日) 18:11:37
> 最確保 の検索結果 約 183 件...
829デフォルトの名無しさん:2008/03/16(日) 18:15:09
>>827
端はわかるけど、中間への挿入はどう考えればよい?
コピーが発生しないなら、挿入時に挿入要素以外の全イテレータは無効になる理由が
わからん。
830デフォルトの名無しさん:2008/03/16(日) 18:17:26
831デフォルトの名無しさん:2008/03/16(日) 18:21:44
このカスどもはスレチな話をいつまで続ける気なんだ
832デフォルトの名無しさん:2008/03/16(日) 18:22:58
>>829
中間への挿入はコピーが発生するに決まってるだろ。
833デフォルトの名無しさん:2008/03/16(日) 18:23:26
てか、そんな神経質にならずに先ずは規格で言われてるように
使えばいいだろ。たいがい問題ない。

考えて見ればBoostスレじゃないか。おしまい。
834デフォルトの名無しさん:2008/03/16(日) 18:24:39
>>832
でしょ。そのときは新しいメモリの割り当てもあり得るじゃん。
ウヒヒ。
835デフォルトの名無しさん:2008/03/16(日) 18:25:45
>>834
内部で確保しておいたバッファを越えていなければ
メモリの割当は起きないだろ。
836デフォルトの名無しさん:2008/03/16(日) 18:26:41
837デフォルトの名無しさん:2008/03/16(日) 18:27:42
要するに、reallocation に原因があるのか
それともコピーに原因があるのか、
それが分かっていない、とそう言ってる。
イテレータが失効するのはコピーが発生する可能性があるから。
reallocation がその時たまたま起こるかもしれないが、それは直接の原因じゃない。
838デフォルトの名無しさん:2008/03/16(日) 18:47:22
ところで progress_display なんだが
839デフォルトの名無しさん:2008/03/16(日) 18:54:59
断る
840デフォルトの名無しさん:2008/03/16(日) 19:03:31
>>835
よく読んでね。
あり得るって書いてるでしょ。
841デフォルトの名無しさん:2008/03/16(日) 19:28:40
【C++】STL(Standard Template Library)相談室 9
http://pc11.2ch.net/test/read.cgi/tech/1204045410/
842デフォルトの名無しさん:2008/03/16(日) 19:59:28
>>838-839
カワイソス
843デフォルトの名無しさん:2008/03/16(日) 19:59:36
>>840
100% 起こることではないってことだろ?
だからこその >>837 だ。
844デフォルトの名無しさん:2008/03/16(日) 20:45:32
boost::mutex てヘッダだけで完結しないんだな。
ライブラリをリンクするのめんどくさいし+デカくなるんだが。
845デフォルトの名無しさん:2008/03/16(日) 22:08:13
Boost関係ないけど、C++の規格ってみんな何を参照してるんですか?
846デフォルトの名無しさん:2008/03/16(日) 22:10:15
JIS のサイトでタダで見れる。
847デフォルトの名無しさん:2008/03/16(日) 22:15:16
ANSI。安いし。
848デフォルトの名無しさん:2008/03/16(日) 22:28:18
つーかJISが自由に見れないってどうなのよ
ああいうものこそフリー・オープンであるべきなのに
849デフォルトの名無しさん:2008/03/16(日) 22:33:31
維持には金がかかるんだよ! ってことだろう。
まあ、ネット上で見る分にはタダだから俺は気にはしてないが。

それよりも、金払って買っても
C の規格書とか画像データの PDF で検索できないとかいう話らしい点は
どうかと思う。
850デフォルトの名無しさん:2008/03/16(日) 22:39:54
なんでこうスレ違いな話をここでやるんだ?
851デフォルトの名無しさん:2008/03/16(日) 23:26:25
うっかり盛り上がってしまったから。
いいじゃないか、たまには。
852デフォルトの名無しさん:2008/03/16(日) 23:33:06
ダメ。
2度も3度も誘導されておいて、移動しないのはアホ。
ふさわしい場で議論をしようという気がない腑抜け。
853デフォルトの名無しさん:2008/03/17(月) 00:10:35
そんな議論なんてまじめなことやる気がないのは
移動しないあたりからよくわかる。
ちょっとおいたのすぎた雑談だよ。
854デフォルトの名無しさん:2008/03/17(月) 02:46:47
ラベルも低いしな。
855デフォルトの名無しさん:2008/03/17(月) 05:01:12
別に良いじゃん
856デフォルトの名無しさん:2008/03/17(月) 05:02:05
っていうかなんでこの板はIDないの?
857デフォルトの名無しさん:2008/03/19(水) 11:39:07
vc8, vc9 で boost.test のビルドに失敗するようになってしまったんだけど,
なんか心当たりある?最近までビルドできていたので boost.test まわりで
最近何か変化があったか見てみたんだけど何もなかった.とりあえず

bjam --builddir=builddir-vc9 --build-type=complete
--toolset=msvc-9.0 --without-test stage 1>..\build.log

みたいにして --without-test してビルドしてるけど,気持ち悪い.
858デフォルトの名無しさん:2008/03/19(水) 11:48:26
bjam --builddir=builddir-vc9 --build-type=minimal
--toolset=msvc-9.0 1>..\build.log

ちなみにこんな風に --build-type=minimal (つまりデフォルト)
だとビルドできる.なんかターゲットが重複しているとか・・
正確なエラーメッセージを後で貼ります.
859857:2008/03/19(水) 11:55:12
boost-build/build\virtual-target.jam:976:
in virtual-target.register-actual-name from module virtual-target
error: Duplicate name of actual target

なので,

http://lists.boost.org/boost-build/2007/02/16143.php

と同じような感じ.
860857:2008/03/19(水) 11:57:05
I'm getting "Duplicate name of actual target" error. What does it mean?
http://www.boost.org/boost-build2/doc/html/bbv2/faq/s02.html
これか?これなのか?
861デフォルトの名無しさん:2008/03/19(水) 12:40:59
progress_displayでコレが簡単に作れるなら使ってもいいかもしれない

    _, ._
  ( ・ω・) now shibakaring ...
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)WWWWWWWWWWWWWWWWWWWWWWW (26%)
862デフォルトの名無しさん:2008/03/19(水) 12:43:00
cursesでも使っとけ
863857:2008/03/19(水) 12:59:28
bjam がこんなエラーを吐きます.一応載せておきます.
http://pastebin.windy.cx/?page=view&id=1205899359
libboost_test_exec_monitor-vc90-mt-gd-1_35.lib
をビルドするにあたってvirtual targetが重複している
ってことらしいんだけど・・
864857:2008/03/19(水) 14:27:50
VERSION_1_35_0_RC1 ならすんなりビルドできるような気がする。
いままで trunk でもとらぶったこと無かったから
RC のタグが打たれてたことに気づかなかった。
865デフォルトの名無しさん:2008/03/19(水) 18:35:55
boostのrandomのライブラリでカイ二乗分布に従う確率変数を生成できますか?

866865:2008/03/19(水) 19:52:19
boostじゃないけど、ググってたら見つけられました。
867857:2008/03/19(水) 19:53:06
1.35 RC1 for VC8, VC9 バイナリ
http://svn.windy.cx/index.php?boost
868デフォルトの名無しさん:2008/03/19(水) 21:42:14
>>856
IDがあったところでプログラミング自体に有益な議論にはならないからだろ。
理数系板はID無し多いね。
869デフォルトの名無しさん:2008/03/19(水) 21:46:14
リアルタイムで回答する場合、
質問者がだれか分かりやすいから
ID 欲しいというときはある。
870デフォルトの名無しさん:2008/03/19(水) 23:12:57
>>861
/.Jでこんなん見っけた。オススメ。
ttp://www.blue.sky.or.jp/grass/doc_ja.html
871デフォルトの名無しさん:2008/03/19(水) 23:25:10
刈りたいのに生やしたら駄目だろ
872デフォルトの名無しさん:2008/03/20(木) 07:09:37
>>870
GJ
873デフォルトの名無しさん:2008/03/20(木) 09:28:01
boostのおかげで自作のプログラムのマクロ機能は
Pythonで実現することに決定しました。
874デフォルトの名無しさん:2008/03/20(木) 17:45:05
質問です。
Visual Studio 2005を用いて
プロジェクトの種類を「CLR」、「Windows フォームアプリケーション」
として新規作成したフォームにボタンを一つ設置し、以下のソースを記述し、

vector<wstring> vec;
vec.push_back(L"Hello");
double pi = 3;
wofstream file(L"save.txt");
text_woarchive oa(file);
oa << (const vector<wstring>& ) vec;
oa << pi;

実行したところ、
oa << (const vector<wstring>& ) vec;
の箇所で

「Debug Assertion Failed!
Program:c\Documents and Settings\unchi65sai\archivetest\Debug\archivetest.exe
File: dbgheap.c
Line: 1473
Expression: _CrtIsVaildHeapPointer(pUserData) 」

とダイアログが表示されて停止してしまいます。
ちなみに、
oa << (const vector<wstring>& ) vec;
の部分をコメント化すると、正常に処理が行われ、テキストファイルが生成されます。

この現象は、プロジェクトのプロパティを何か変更することで回避できるのでしょうか?
あるいは、CLRでは、 stringの書き出しできないものなのでしょうか?
よろしくお願いします。
875デフォルトの名無しさん:2008/03/20(木) 17:52:50
スレ違い
876デフォルトの名無しさん:2008/03/20(木) 18:20:08
>>874
C++/CLIでunmanagedなコードを混在させてboostを使うとそうなる。
アプリケーションのエントリポイントを次のようにすると直ると思う。
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z

ちなみにこの問題はVS2008では直っているらしい。
877874:2008/03/20(木) 19:17:41
>>876
プロジェクトのプロパティを開き、
「構成プロパティ」→「リンカ」→「詳細」→「エントリポイント」
の設定を変更したところ、正常に機能するようになりました。
情報をありがとうございました。
878デフォルトの名無しさん:2008/03/21(金) 13:56:04
Windows で boost python を使ったアプリケーションを書いています。
配布に際して boost python 自身の DLL は一緒に配布しなければ
ならないのは当然として、Python バイナリパッケージ由来のファイル
も何か配布しなければならないのでしょうか?
879878:2008/03/21(金) 14:00:43
Dependency Walker で調べてみたら、
C:\WINDOWS\system32\python25.dll
も必要なようです。

しかし!驚愕の事実!
python25.dll 自体が Visual C++ 7.1 のランタイムを要求している!
自分は Visual C++ 8 を使っているのです。異なるバージョンの
ランタイムを要求する DLL たちをあわせて使っていいのかなぁ。
今までもサードパーティのライブラリをそういうこと気にせず
使ってたけど、動いていたし、まぁいいか。いいことにします。
作ってるアプリも売り物じゃないし。
880デフォルトの名無しさん:2008/03/21(金) 15:21:48
ところで POCO 使ってる人いる?
881デフォルトの名無しさん:2008/03/21(金) 20:38:36
Plain Old C Object?
882デフォルトの名無しさん:2008/03/21(金) 23:15:47
プログラムがバグって動かなかったけど、なんとなくポインタを shared_ptr に変えてみたら動くようになった
好きになったぜ>ぶーすと
883デフォルトの名無しさん:2008/03/22(土) 00:13:10
>>880-881 これだろう
POCO (C++ Portable Components, http://pocoproject.org/)
884デフォルトの名無しさん:2008/03/22(土) 00:49:54
>>879
DLLというのはもともと、DLLを使う側に依存しないようになってるので、
DLL「A」とDLL「B」が違うランタイムを使っていてもぜんぜんOKです。
今回は例外として、普通はアプリからどのランタイムを使っているのかなんて分からないし、
気にするべきでもないと思います。
(考慮すべきことはマルチスレッドに対応してるかどうかくらい)

ランタイムが違えば、必要なDLLが増えるということはあるけど、
ランタイムが違うことで動かなくなることは多分無いです。
もし動かなかったら、それは別の問題が発生している可能性高し。

> Python バイナリパッケージ由来のファイル
> も何か配布しなければならないのでしょうか?
Pythonがインストールされている環境を前提にするならば配布する必要は無いです。
そうでないなら配布する必要があります。
885デフォルトの名無しさん:2008/03/22(土) 10:06:27
>>884
ふむ、そうなのか。ミューテックスとかは
OSで管理するものだから問題ないんだな。
でもマルチスレッド考えるとなんか副作用が
ありそうなんで、暇なときに調べてみる
886デフォルトの名無しさん:2008/03/22(土) 10:33:00
OSのAPIとCの標準ライブラリが分離されてるWindowsには好感が持てる
887デフォルトの名無しさん:2008/03/22(土) 10:38:15
APIは分離しているけど 実装はMSVCRT.DLLなどに依存しているがね
888デフォルトの名無しさん:2008/03/22(土) 20:13:27
std::sort(v.begin(), v.end(), _1->Func() > _2->Func());
みたいなことをlambdaやbindを使ってやる方法ありますか?
889デフォルトの名無しさん:2008/03/22(土) 20:23:24
std::for_each( vec.begin(), vec.end(),
 if_( _1 % 2 == 0 )[
  cout << _1 << "は偶数\n"
  ].else_[
  cout << _1 << "は奇数\n"
 ]
);

こんな感じで書けます。
出典 ttp://www.kmonos.net/alang/boost/classes/lambda.html
890デフォルトの名無しさん:2008/03/22(土) 20:25:23
ごめん忘れて、よく見てなかった...
891デフォルトの名無しさん:2008/03/22(土) 20:26:47
こういうこと?

std::sort(v.begin(), v.end(), bind(&Class::Func, _1) > bind(&Class::Func, _2));
892888:2008/03/23(日) 01:31:52
>>891
thx
うまくいきました。
893オガちゃん萌え ◆tyvkWCNtzY :2008/03/23(日) 21:04:51
>>885
OSうんぬんより、mutexは別スレッドからlock/unlock期間中のアクセスを待機させるから安全か
どうかとえば、使用は慎重を期するよ
別プロセスは関係ないが…
共有メモリやらメモリマップドファイルは別だけど
セマフォ、ミューテックスの使用は本当に必要であるかを加味した方が良さそうに思う
boost::thread::mutex(だっけ?) はでも便利だね
スコープから抜ければ勝手にデストラクタがunlockしてくれるのも楽でよい
自作してもauto変数なら当然かも試練、スマソw

>>886
悪の枢軸たるWindowsもそう考えると良いとこあるのかね
でもさ、結局printfなんかもさMSVCRT.dllなんかがラップしてんだよね
メイクファイルでビルドしようとしてリンクエラーで苦戦したことがよくあったなあ

>>888
>>891が答え書いてるけど、bindは便利だよな!
894デフォルトの名無しさん:2008/03/23(日) 22:06:13
STLスレでもやってたけど、ここはお前の雑談スレじゃないんだよ?
895デフォルトの名無しさん:2008/03/23(日) 22:11:55
410 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/22(土) 20:51:00
なんで雑談してんの?

411 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/22(土) 23:17:29
相談が無いからだろう

相談できる雰囲気でもないがね

412 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/23(日) 00:44:28
何で雑談しているのかを聞く それも雑談なんじゃね?
自分の胸に聞くのがはえーんじゃね?

415 名前:オガちゃん萌え ◆tyvkWCNtzY [sage] 投稿日:2008/03/23(日) 20:37:34
>>410-412
まぁ固いこと言わないでマターリやろうよ

こんな事書く人間に何を言っても無駄かと
NGが得策
896オガちゃん萌え ◆tyvkWCNtzY :2008/03/23(日) 22:25:51
>>894-895
スレ違いってほど外れた話題はしてないつもりだが?
俺叩く暇あるなら、なんかboostについて書いてくれ
897デフォルトの名無しさん:2008/03/23(日) 22:31:18
なんていうかもう糞コテ氏ねとしか
898デフォルトの名無しさん:2008/03/23(日) 22:39:32
boostはもう無しで生きていけないけど、テンプレート使い過ぎて
時々コンパイラが音を上げるのが困る
899オガちゃん萌え ◆tyvkWCNtzY :2008/03/23(日) 23:42:11
>>898
STLスレで誰か書いていたが、EffectiveSTLにSTLのエラーは読むなってのがあって、実際に本棚に
埋もれたEffectiveSTL読んだらconstキャスト忘れとかのエラーを理解しろみたいなのが書いてあったよ
SingletonとAbstractFactoryパターンをよく使うんだが、AbstractFactoryをテンプレートにして
中にmap<int, string>かなんかやったときにwarningが出まくったことあったw
それこそ、この内容はSTLか。
boost一番よく使うのはツールだな
tokenizer、regex、bindなんかはもう無しじゃ生きていけない
900デフォルトの名無しさん:2008/03/24(月) 00:33:17
C++から基底クラスを公開してPythonでクラスを継承して実装、
C++からその実装されたクラスをnewしてPythonに渡す。
といったような事がやりたいんですが、boost.pythonで出来ますか?

参考書籍、およびサイトなども教えてもらえたらありがたいです。
901デフォルトの名無しさん:2008/03/24(月) 07:41:37
できたらすごいな。
俺はPython使い始めたばっかりで一方向の使い方しかしてないけど興味ある。
できたら教えて欲しいな。
902デフォルトの名無しさん:2008/03/24(月) 10:14:15
IronPythonならそのものズバリな事が簡単にできるんだがのぉ。
903デフォルトの名無しさん:2008/03/24(月) 13:56:39
>>902
ドトネトは断る!

って、うそ。 C++/CLI は使ってるし。
とはいえ、非UNIXで動かしたいプログラムに
多いんだよな、Boost.Python 使いたくなるケース。

IronPython + mono でやれって?断る!
904デフォルトの名無しさん:2008/03/24(月) 13:59:17
上のほうにも出てたがLua+LuaBindでも使ったほうがいいんじゃないか。
ランタイムDLL類不要になるし。
905デフォルトの名無しさん:2008/03/24(月) 15:53:59
>>904
Lua + LuaBindとかSquirrel + SqPlusとかも考えましたが、
Boost.Pythonで無理ならSquirrelにするかな。

ランタイムDLLはオプションをdefineしてやればいらなくなると
どっかで読んだ覚えがあるんですが読み間違いですかね。
906デフォルトの名無しさん:2008/03/25(火) 22:31:11
VS2005 で作っていたプログラムを VS2008でコンパイルしたら;

Unknown compiler version - please run the configure tests and report the results

と言うワーニングが Boost を使っているソースででました。
リンクも成功し、実行もできるのですが。。

このワーニングを消すにはどのようにしたらよいのでしょうか?
907デフォルトの名無しさん:2008/03/25(火) 22:56:11
SVNのHEADを落として使う。
1.34.1がでたのは、VC9が出る前だ。
908デフォルトの名無しさん:2008/03/26(水) 01:00:40
ここで、どなたかがUpしてくれた、1.35 の Build 済みを使ったのですが。。
ヘッダーは VC8,VC9 共通みたいでした。
909デフォルトの名無しさん:2008/03/26(水) 03:24:57
何人かの人がバイナリを上げているみたいですが、そのうちの一人です。
boostのどのライブラリでワーニングが出ます?もう少し詳しい状況が分かると調べられるのですが。
910デフォルトの名無しさん:2008/03/26(水) 05:28:28
その画像がどのスレッドに貼られていたのか分からないんだよな
911デフォルトの名無しさん:2008/03/26(水) 10:04:29
>>907
おいらは906じゃないけど、SVN で落としたのに置き換えたらエラーがでなくなった
あんがと
912デフォルトの名無しさん:2008/03/26(水) 10:42:38
最新版のヘッダーのみ落としてきていれたんですが、ワーニングは消えませんでした;
コンパイル時に config/visualc.hpp 内のワーニングなので、ライブラリは関係なさそうなのですが。。
913デフォルトの名無しさん:2008/03/26(水) 11:31:54
消えないって言うんだったら、
1.35の正式版が出るまで無視するってのは駄目か?
どうせ実害はないんだし。
914デフォルトの名無しさん:2008/03/26(水) 12:17:22
HEADは結構不安定。
まぁ自分の使いたいライブラリがうまく動いていればそれでよし。
915デフォルトの名無しさん:2008/03/26(水) 16:18:25
ありがとうございます。正式版までワーニングは見ないことにします。
916デフォルトの名無しさん:2008/03/30(日) 11:14:46
1.35.0キタ
917デフォルトの名無しさん:2008/03/30(日) 12:05:34
>>916
News
* Version 1.35.0
New Libraries: Asio, Bimap, Circular Buffer, Function Types, Fusion, GIL, Interprocess, Intrusive, Math/Special Functions, Math/Statistical Distributions, MPI, System.
Updated Libraries: Graph, Hash, Iostreams, Multi Array, Multi-index Containers, Serialization, Thread, Wave, Xpressive.
March 29th, 2008 12:00 GMT

ひさしぶりのうpだけあって盛りだくさんだなぁ
918デフォルトの名無しさん:2008/03/30(日) 12:19:33
相変わらずVC8.0最強なんですか
919デフォルトの名無しさん:2008/03/30(日) 12:32:34
これでまたしばらくビルドできませんの質問が相次ぐんだろうか
920デフォルトの名無しさん:2008/03/30(日) 12:47:12
Boost.InterprocessのWindowsの実装って貧弱じゃない?
というかPOSIXを前提に設計されているようで、
Windowsだと素直に実装できないってのもあるのかな。
921デフォルトの名無しさん:2008/03/30(日) 13:27:27
threadingやasyncなんかもそういうノリで作ってそうだから
敬遠してる
922デフォルトの名無しさん:2008/03/30(日) 17:03:02
http://www.kmonos.net/alang/boost/build.html
と本スレ参考にv1.35を
@vcvars32.bat実行
Abjam --toolset=msvc-9.0 stage
としたんですが、以下のように出てビルドできません。
何か足りないツールでもあるのでしょうか?

MkDir1 lib
'C:\DOCUME~1\????' ???A?????R?}???h???????O???R?}???h?A
???????\???v???O???????????o?b?` ?t?@?C?????????F?????????????????B

mkdir "lib"

...failed MkDir1 lib...
MkDir1 bin.v2
'C:\DOCUME~1\????' ???A?????R?}???h???????O???R?}???h?A
???????\???v???O???????????o?b?` ?t?@?C?????????F?????????????????B

mkdir "bin.v2"

...failed MkDir1 bin.v2...
...skipped bin.v2\libs for lack of bin.v2...
...skipped bin.v2\libs\test for lack of bin.v2\libs...
...skipped bin.v2\libs\test\build for lack of bin.v2\libs

以下たくさんskipped

923デフォルトの名無しさん:2008/03/30(日) 17:41:06
一般論として、空白か非ASCII文字(ユーザ名)を含んだパスが悪さしている可能性はないか?
924デフォルトの名無しさん:2008/03/30(日) 17:50:37
>>923
ユーザー名は確かに日本語ですわ。
で、多分"Documents and Settings"配下で何かしようと
してるんだと思うんだけどユーザーだけ切り替えればいけるかな。
やってみる。

@vcvars32.bat実行
Abjam --toolset=msvc-9.0 stage
の手順は一般的に問題ないっすよね?
925デフォルトの名無しさん:2008/03/30(日) 18:17:59
やっぱりユーザー名だったみたい。
administratorに切り替えたらビルドできたような気がする。
dllとかlibがbin.v2っていうフォルダに出来てる。
ただ、
bjam --toolset=msvc-9.0 stage だと
アップデートになってしもうた。
1.35で新たに追加されたAsioやら全てをビルドするためには
別のオプションがいる??
926デフォルトの名無しさん:2008/03/30(日) 18:25:04
アップデートだとAsioとかビルドされていない?
927デフォルトの名無しさん:2008/03/30(日) 19:31:09
>>926
1.34.1の既存のものはビルドされた(アップデート)んだけども
1.35.0で新しく追加されたものがビルドされてないみたい。

bjam --builddir=builddir-vc9 --build-type=complete --toolset=msvc-9.0 stage 2>&1 | tee c:\boost.log

でやってみたんだけど、static、dynamic(dll)の二つのバージョンが出来たこと以外
変わらんかった。

http://www.boost.org/doc/tools/jam/jam/usage.html
には
bjam ( -option [value] | target ) *
でtargetを指定しなければ全てビルドされると書いてあるんだけどなあ。
928デフォルトの名無しさん:2008/03/30(日) 19:50:45
>>922

bjamの最新版は日本語メッセージが文字化けして???になるよ。

929デフォルトの名無しさん:2008/03/30(日) 20:07:01
>>928
ああそうなんだ。
とりあえず既存のものはビルドできるみたいだ。
release、debugとも出来てる。
asioとかがビルドできない。ビルド対象を指定するか
設定ファイルなんかが必要なんだろうか。
930デフォルトの名無しさん:2008/03/30(日) 20:37:58
>>929
asioはライブラリ不要のはず
931デフォルトの名無しさん:2008/03/30(日) 21:16:54
新しい機能のレビューお願いします
932デフォルトの名無しさん:2008/03/30(日) 21:28:17
waveがイマイチ遅い
933デフォルトの名無しさん:2008/03/30(日) 21:56:29
>>930
ホントだ。そうみたい。
もしかして1.35でライブラリ作成する必要のある新しいものって
無いのかも?

ソケットで遊んで見る。
934デフォルトの名無しさん:2008/03/30(日) 22:32:33
ASIOとかWaveとか一瞬スレ間違えたかと思った
935デフォルトの名無しさん:2008/03/30(日) 22:40:41
サウンドプログラミングかよ
936デフォルトの名無しさん:2008/03/30(日) 22:42:11
>>933
新しいものの中ではsystemが要ビルド。
937デフォルトの名無しさん:2008/03/30(日) 22:45:49
>>936
それならstage\libにライブラリできてるから成功してるっぽい。
938デフォルトの名無しさん:2008/03/31(月) 01:02:35

939デフォルトの名無しさん:2008/03/31(月) 01:17:39
しかし、bjamはいい加減、VC8以降はシングルスレッドビルドを無視、あるいはエラーを返すべきだと思うんだ。
自分で指定するのめんどくさい。
940デフォルトの名無しさん:2008/04/01(火) 02:50:31
cとpython混合させたきゃpython.ctyes使え
boost.pythonはpythonをcから呼びたい時だけ使うのがいい
941デフォルトの名無しさん:2008/04/01(火) 14:55:03
sqliteをハンドリングするような関連コンポーネントってあるのかな
942デフォルトの名無しさん:2008/04/01(火) 21:32:57
boost::propertyはC#みたいなプロパティー作れるものなの?
943デフォルトの名無しさん:2008/04/02(水) 02:49:16
開発環境としてVS2005を使用し、
tokenizerを使用したプログラムをデバッグモードで実行したところ
超絶遅くて絶望したんですけど、これは回避できないですか?
944デフォルトの名無しさん:2008/04/02(水) 03:17:27
リリースモードで実行
945デフォルトの名無しさん:2008/04/02(水) 17:54:19
GCCだとboost.testやboost.optionalがテスト通らない
Boostの中の人はM$信者なの??
946デフォルトの名無しさん:2008/04/02(水) 18:15:37
>>945
信者どころか社員いるし
しかし、パスするテストを増やすのに必要なのは信者じゃなくて人柱と開発者だ
947デフォルトの名無しさん:2008/04/02(水) 18:44:53
でもまだVC++2008はちゃんと対応してない。
948デフォルトの名無しさん:2008/04/02(水) 20:53:59
spiritのセマンティックアクションにメンバ関数を渡したい場合、
どういう方法が良いでしょうか?
949デフォルトの名無しさん:2008/04/02(水) 21:02:02
bindするもんなんじゃないの?
950デフォルトの名無しさん:2008/04/02(水) 21:56:08
>>949

struct parse : public grammar<parse>
{
 template <typename ScannerT>
 struct definitionmy(parse const& self) {
  //略
  int_p[bind(&parse::func, self, _1)]; //bindでメンバを渡す
 };

 void func(const int val);
};

こういうことですか?

他の方法って無いのでしょうかね?
毎回bind書くのはしんどいんですが。
951デフォルトの名無しさん:2008/04/02(水) 22:35:21
俺も最初bindしていたけど、たしかに面倒になってきて、
極力assign_aとかpushback_aとか定義済みのやつで済ませるようになった。

あと、そのfuncはconst付けないとエラーになるよ。
952デフォルトの名無しさん:2008/04/02(水) 23:58:07
ところでboost1.35.0とbjam3.1.16-1で

bjam --toolset=msvc-8.0 -sBZIP2_SOURCE=〜 -sZLIB_SOURCE=〜 --stagedir=. stage

ってやってビルドしたら、なぜかreleaseビルドのマルチスレッドのlibファイルしかビルドされないんだが、こういう仕様に変わったの?
前はdebugとかも出てたよね?
953デフォルトの名無しさん:2008/04/03(木) 00:33:38
>>952
試行錯誤の結果、こうすれば全部ビルドされた

bjam --toolset=msvc-9.0 stage release debug link=static,shared runtime-link=static,shared

BZIP2_SOURCEとかは事前にsetしてある
954デフォルトの名無しさん:2008/04/03(木) 00:56:22
>>951
>funcはconst付けないとエラーになる

boost::functionに一旦入れてから使ったらエラーが出ずに
通っちゃったので気が付きませんでしたw
955デフォルトの名無しさん:2008/04/03(木) 01:50:21
>>954
どうやったの?

俺も今Spirit使ってんだが、constが厳しくて
mutableにお出ましいただいている。
956デフォルトの名無しさん:2008/04/03(木) 02:15:28
>>954
大まかには950で、

 struct definitionmy(const parse &self) {
  boost::function<void (const wchar_t*, const wchar_t*)> fnc;
  fnc = boost::bind(&parse::func, self, _1, _2);
  r = str_p("hoge")[fnc];
 };

void func(const wchar_t *p1, const wchar_t *p2);

これで通ってしまいましたよ。
デバッガでfuncが呼び出されるのも確認できました。
957デフォルトの名無しさん:2008/04/03(木) 02:18:10
>>944
それで解決しました。でもブレークできない諸刃の剣です。
958デフォルトの名無しさん:2008/04/03(木) 02:38:06
>>956
おお、VC++ 2008でもGCC 4.2.3でもエラーでない。

ってエイプリルフールはもう過ぎたぞ。見事に釣られたが。
bindで束縛するときは値渡しだからコピーされているだけだw。
ref使うとやっぱりコンパイルエラーになる。

まあ俺も人のこと笑えない。同じようにbindしている場所がある。
メンバが解析データ保持のshared_ptrだけだから何とも問題が起きなかったわけだ。
959デフォルトの名無しさん:2008/04/03(木) 04:27:58
http://language-binding.net/pyplusplus/pyplusplus.html
これってどのぐらい便利なの?
960デフォルトの名無しさん:2008/04/03(木) 05:38:30
CableSwigなんてあるんだね
http://www.itk.org/HTML/CableSwig.html
boost.pythonと比べたらどっちがいいのかな
961デフォルトの名無しさん:2008/04/03(木) 15:50:02
>>958
うは、素で気が付かなかったorz
962デフォルトの名無しさん:2008/04/03(木) 16:46:25
Boost.Python のビルドって、Python 自身がインストールされて
いなくても完了するように見えるんだけど、正しい?
Boost.Python のヘッダファイルやソースコード眺めてても
Python 自身のヘッダファイルはインクルードして無いように見える。
963962:2008/04/03(木) 17:18:57
ごめん、よく探したらいろいろと Python 関連の
ヘッダをインクルードしていた。とくにインクルールパス
を指定していないのになぜかビルドに成功する。
bjam の魔法かな? Windows XP2
964デフォルトの名無しさん:2008/04/03(木) 18:37:29
python.jam見るとレジストリから取得しているっぽい
965デフォルトの名無しさん:2008/04/03(木) 23:12:19
>>953
d
夜中に手を煩わせて申し訳ない。おかげで全部のlibファイルビルドする事ができました。

bjam自体の仕様が変わったのか、libフォルダへのコピーをしなくなっていたけど。
966デフォルトの名無しさん:2008/04/03(木) 23:38:48
>>965
BOOST_DIR/stage/libにはいってない?
--stagedirオプションをつけないとデフォルトではstageディレクトリの中にlibが作られる。
967デフォルトの名無しさん:2008/04/04(金) 20:10:02
>>966
すまない、まさにそれだった。
968デフォルトの名無しさん:2008/04/05(土) 00:50:46
HAVE_ICU=1 でビルドすると
extra argument icui18n
なんてエラーが出て前に進めないよ!
まるで僕の人生のようだ。
助けて!

ICU は 3.8.1 使ってます。
969デフォルトの名無しさん:2008/04/05(土) 01:08:19
736 :デフォルトの名無しさん:2007/09/26(水) 10:14:42
メモメモ

vc8環境下でICU3.8をビルドしてboost.regexで使うようにすると
icui18n.libとかicudata.libが無いっておこられる
そこでicuin.libとicuind.libをicui18n.lib icui18nd.libに、
icudt.libをicudata.libにコピー&リネームすると通る
regexのテストは一応全通過

本来はどうするべきなんだろうか…
ーーーーーーーー
ってコトらしいけど、どうしたもんかなぁ。
970デフォルトの名無しさん:2008/04/05(土) 01:09:26
ICU3.6でも同じ現象だから、これは boost の方をいじるべきかなぁ。
971デフォルトの名無しさん:2008/04/05(土) 01:19:43
libs\regex\build\Jamfile.v2の適当に該当しそうなとこ書き換えてみるとかどうよ
972デフォルトの名無しさん:2008/04/05(土) 01:21:59
boost::exceptionとかacceptされてたと思うけど、その辺の最近acceptされたやつは入ってないんだね。
個人的にはintrusiveが面白そうかなぁ。
973デフォルトの名無しさん:2008/04/05(土) 01:47:03
libs\regex\build\Jamfile.v2 読んで判明。
HAVE_ICU と ICU_PATH を同時に使っちゃだめだったんだ。
多分 HAVE_ICU はもう obsoleted で ICU_PATH だけ設定
すればライブラリファイルは自動判別してくれるみたい。

って、ライブラリのファイル名の問題は解決したけど、
結局以下のエラーでビルドできん・・・

G:/boost-trunk/Version_1_35_0/tools/build/v2/kernel\class.jam:93: in new
*** argument error
* rule object(searched-lib-target)@659.__init__ ( name : project : shared ? : search * : action )
* called with: ( icudt icuin icuuc : object(project-target)@79 : true : /C:/Program Files/ICU4C/icu4c-3.8.1/lib : object(null-action)@658 : : : : )
* extra argument icuin
G:/boost-trunk/Version_1_35_0/tools/build/v2/tools\builtin.jam:349:see definition of rule '__init__' being called

bjam を使いこなすには python の知識が必要なんだろうか・・・
974デフォルトの名無しさん:2008/04/05(土) 03:01:12
1.35.0はMS専用なのかなー?
975デフォルトの名無しさん:2008/04/05(土) 03:45:58
Building With Unicode and ICU Support
http://www.boost.org/doc/libs/1_35_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support

ううむ、Windows + VC9 でうまくいかん・・・
直接の原因は buildin.jam で定義されている

class searched-lib-target : abstract-file-target
{
rule __init__ ( name
: project
: shared ?
: search *
: action
)

のコンストラクタの引数 name に、ICU4C で必要なライブラリを
3つ渡しているからなんだが( name は一つしか受け取れない)。
976デフォルトの名無しさん:2008/04/07(月) 04:20:20
boost初心者で、特にrandom.hppしか使ってないのですがl、質問させてください。
標準正規分布のrandom variableを生成するクラスを作ったのですが、
class nrv {
public:
nrv() :
gen(time(NULL)),
dst(0.0, 1.0),
rv(gen, dst) {}
double val() const { // ここのconstをはずすとコンパイルできる
return rv();
}
private:
mt19937 gen;
normal_distribution<> dst;
variate_generator<mt19937, normal_distribution<> > rv;
};
上のconstをはずすとコンパイルできないのはなんででしょうか?
977デフォルトの名無しさん:2008/04/07(月) 04:29:54
variate_generator::operator()がconstでないから

この説明で判らないならC++初心者スレ行ってこい
978デフォルトの名無しさん:2008/04/07(月) 11:25:54
>>977
よくわかりませんでした(泣)
rv()はvariate_generator::operator()というのはわかりますが、それが手元のboost-1.34.1だと
result_type operator()() { return _dist(_eng); }
という実装になっていて、それが参照とかポインタとかを返してるから、ということでしょうか?
でもこれはdoubleを返すんじゃないかと思ったのですが。

あと、以下のコンパイルエラーの箇所でエラーになる理由は何でしょうか?
class nrv {
public:
nrv(int seed) :
gen(seed), // ここでコンパイルエラー。seedを定数(0とか1とか)にするとコンパイルとおる。
dst(0.0, 1.0),
rv(gen, dst) {}
private:
mt19937 gen;
normal_distribution<> dst;
variate_generator<mt19937, normal_distribution<> > rv;
};

979デフォルトの名無しさん:2008/04/07(月) 12:20:35
>>978
C++ではメソッドにconstをつけることができる。つまり、
 result_type operator()() const { return _dist(_eng); }
となっていればできる。

後者は多分、seedの型がunsignedじゃないから
オーバーロードの問題が出ているのだと思う。
980デフォルトの名無しさん:2008/04/07(月) 12:25:25
>>978
- nrv(int seed) :
+ nrv(mt19937::result_type seed) :
981デフォルトの名無しさん:2008/04/07(月) 12:30:45
>>978
前半部分について
result_type variate_generator::operator()() { return _dist(_eng); }

//some pseudo code
result_type operator()(variate_generator * const this) { return _dist(_eng); } //@

一方、
double nrv::val() const {
return rv();
}

//some pseudo code
double val(const nrv * const this) {
return (this->rv)();
}

double val(const nrv * const this) {
return (this->rv).variate_generator::operator()();
}

double val(const nrv * const this) {
return operator()(&(this->rv)); //@の呼び出し
}

&(this->rv)の型は少なくともconst variate_generator *だが、@のパラメータは
variate_generator *であり、variate_generator *をconst variate_generator *
では初期化できない。
982デフォルトの名無しさん:2008/04/07(月) 20:02:16
判らないなら初心者スレ行けと言っておろうに
983デフォルトの名無しさん:2008/04/07(月) 21:47:57
>>977,>>982
仕切るなよ、糞野郎!
984デフォルトの名無しさん:2008/04/07(月) 22:31:17
>>983
同じこと思った香具師はいっぱいいるから代表ってとこだろ
985デフォルトの名無しさん:2008/04/07(月) 23:18:35
>>984
>>982 = >>977 だよ
初心者スレに行っても、boostのことがわかってないと
>>981のような回答は難しいんで結局このスレで聞くのが良いと思う
986984:2008/04/07(月) 23:33:44
>>985
boost初心者スレ無いのか…
確かにboost以前の問題を解決できる人にboost初心者スレは必要ないような気もするし
スキマにはさまって身動きできない人を救済するのはこっちのスレの役目か
987デフォルトの名無しさん:2008/04/08(火) 02:45:55
普通にC++のスレで聞けば教えてくれるよたぶん
988デフォルトの名無しさん
誰か boost 1.35 + Visual C++ 8/9 + ICU で
regex のビルドできている人います??
Linux ではできてるんだけど・・・