[過去ログ] Boostを語れゴラァ part3 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
636: 2007/01/18(木)11:32 AAS
boost.decimal みたいなライブラリがほしいなぁ。
637: 2007/01/18(木)11:43 AAS
.NETはDecimal定数が扱えるのがぶっちゃけめちゃくちゃ便利だな。
複素数やリストもそうだけど、定数やリテラルとして使えるかどうかって
結局使い勝手に格段の差が出来ちまうな。
638
(1): 2007/01/18(木)14:32 AAS
>>635
kwsk
639
(1): 2007/01/18(木)15:25 AAS
>>638
外部リンク:ja.wikipedia.org
640: 2007/01/18(木)15:33 AAS
>>639
thx
641
(1): 2007/01/19(金)00:56 AAS
tuple と lambda を使ってみてたんだけど、

bind(&get<0 _1);

って式が通らないんだが……。
返り型の指定してもダメだし、ドキュメントいくら読んでもさっぱりわからない。
誰か教えてくれないだろうか……(´・ω・`)
642
(1): 2007/01/19(金)01:00 AAS
質問です。
クラスAとクラスBがあるとしてshared_ptrで相互参照するのはNGというのを最近知りました。
すると、相互参照したい場合は
class A{
weak_ptr<B> b;
}

class B{
shared_ptr<A> a;
}
とすれば良いのでしょうか。ちなみにAは一つしか存在しないBの管理クラスで、Bは複数存在する管理されるクラスなのですが、
その場合はこのように管理される側が管理する側をshared_ptrで参照して、管理する側が管理される側をweak_ptrで保持するのが良いのでしょうか。
あとscoped_ptrというのもあるようで、それぞれどういう時に利用すれば良いのかまだいまいち掴めません。
643
(1): 2007/01/19(金)06:57 AAS
>>641
getは設計が古くなっている。
戻り値指定なしでもできるが長くなるのでこんな感じで

template<typename Result, int i>
struct get
{
/**/ typedef Result result_type;

/**/ template<typename Tuple>
/**/ Result operator()(Tuple& t) const
/**/ { return boost::get<i>(t); }
};

bind(get<double, 0>(), _1);
644: 2007/01/19(金)07:27 AAS
>>642
各オブジェクトの寿命を考えてみたらいいと思うよ。
あと、weak_ptrはオブジェクトを参照するときに
一時的なshared_ptrを作成するのでコストがかかるね。

scoped_ptr, scoped_arrayは、受け取ったポインタを
自分の寿命が切れるときにdeleteするだけのポインタクラス。
C++の仕様がわかっていれば使い道はいろいろ。
645: 2007/01/19(金)14:15 AAS
で、いつ標準化されるんですかね。
646: 2007/01/20(土)00:52 AAS
>>643
おお、ありがとう。
やっぱり戻り値の型が判別できないのが問題なのかな?

色々いじりつつ、もう一度 lambda の sig を読んでみたら、今度はちょっと分かった気が。

template <int i>
struct get {
/**/ template <class Tuple>
/**/ typename boost::tuples::element<i, Tuple>::type operator()(Tuple& t) const {
/******/ return boost::get<i>(t);
/**/ }

/**/ template <class Args>
/**/ class sig {
/******/ typedef typename boost::tuples::element<1, Args>::type Tuple;
/******/ typedef typename boost::tuples::element<i, Tuple>::type Result;
/**/ public:
/******/ typedef typename boost::remove_cv<Result>::type type;
/**/ };
};

bind(get<0>(), _1);

ってことで、こう書いたらとりあえず行けたんだが、こんな感じでいいのかな?
もっといいやり方があったりするんだろうか。

しかし、関数オブジェクトならこれでいい(?)けど、テンプレート関数には sig は使えないよね。
ということは、関数の場合はテンプレート引数を全部指定しないとダメってことかな。
いや、でも、boost::get<> のテンプレート引数全部指定してもダメだったし、キャストしてもムリだったような。
なんかまたよくわからなくなってきた…(´・ω・`)
647: 2007/01/20(土)11:19 AAS
引数指定が間違ってるんだろう。consとかいるぞ
そもそもgetのシグニチャーは公開されてないと思われるので書いてはいけない。
要は君の::getが主役で、boost::getはシンタックスシュガーだ
関数オブジェクトがつねに偉いのだ
648
(1): 2007/01/21(日)20:32 AAS
bindで結合されたオブジェクトをfor_eachで適用するとき,適用されたオブジェクトを取り出すには
for_eachの結果を何に代入すればいいのでしょうか?

struct fn1
{
double sum;
void operator()(double &t )
{sum += t;}
}

fn1.sum=0;

何に代入したらオブジェクトfn1を取り出せる?
=for_each(ar.begin(),ar.end(),
boost::bind( fn1,
boost::bind(fn2,_1 ))
);

代入しないと
fn1.sum==0
となる
649
(2): 2007/01/21(日)20:41 AAS
>>648
bind() された関数オブジェクトの型は決められていないから、無理。
かわりに、結果の書き込み先を参照で持たせるのがいいんじゃない?

総和なら std::accumulate() 使えばいいんだけどね。

ソース貼るならコンパイルできるかどうか見直せよ。
650
(1): 2007/01/21(日)20:48 AAS
boost::bind(boost::ref(fn1),
651: 2007/01/21(日)20:52 AAS
>>650
できました
感謝
652: 2007/01/22(月)01:40 AAS
lambda
のtestコード
algorithm_test.cpp
がMSVC8でコンパイル通らない
653: 2007/01/22(月)03:06 AAS
>>649←恥ずかしい人ハケン
654: 2007/01/22(月)06:14 AAS
よかったね。毎日が発見の連続だね。
655: 649 2007/01/22(月)07:01 AAS
ん?何か変なこと言ったか?
656: 2007/01/22(月)16:11 AAS
みなさん、boost::FileSystemって使ってます?
日本語対応してないとかmingwで一部テストがエラーとか、ちょっと使うのに二の足踏んでます。

でも移植性のある他の代替選択肢もなさそうだしなぁ・・・。
657: 2007/01/22(月)16:39 AAS
>> でも移植性のある他の代替選択肢もなさそうだしなぁ・・・。

boost以外のポータブルなライブラリを使えばよいのでは。
ファイルシステム関連でMBCS/WCSに対応してないって、実用上論外だと思うが。
Shift_JIS環境では使い物にならないし、Win32のFindFirstFileA()って
パス長に思いっきり制限あるし。
658: 2007/01/22(月)17:16 AAS
CVSから1.34拾ってこい。
659: 2007/01/22(月)17:47 AAS
がらっと変わってるよね
念願の basic_path 化とか他盛りだくさん

外部リンク[htm]:boost.cvs.sourceforge.net
660: 2007/01/22(月)19:35 AAS
1.34 早くリリースされないかな?
661
(1): 2007/01/22(月)21:28 AAS
1.35は大変なことになるというか、もう別の言語というか
Fusion, MPI, Asio, Interprocessなどなど

ライブラリに関しては、標準が何かするべきではないと思う
標準は、発表の場を提供することに予算を使うべきだ。
そして、その場所を標準として定義すべきだ(とか言ってしまおう)
実際stlportが泥を被っているわけだしな
BoostがなければC++は死んでたよ
662: 2007/01/22(月)22:11 AAS
>>661
すまんが言いたいことがよくわからん。
もうちょっと具体的 and/or 他人に理解できるようにお願い。
663
(1): 2007/01/22(月)22:40 AAS
signalを関数objectとしてfor_eachに渡す方法はないのでしょうか?

struct obj1
{
void operator()(double &t) const
{std::cout << "obj1:" << t << " " ;}
};
struct obj2
{
void operator()(double &t) const
{std::cout << "obj2:" << t << " " ;}
};

boost::signal1< void ,double> sig;
sig.connect(obj1());
sig.connect(obj2());

std::vector<double > ar;

std::for_each(ar.begin(),ar.end(),sig)

err sigのプライベートメンバーにアクセスできません
となってfor_eachに渡せません
単にobj1,2を両方使いたいだけなんだけど
664: 663 2007/01/22(月)22:56 AAS
自己解決しました
std::for_each(ar.begin(),ar.end(),boost::bind<void>(boost::ref(sig), _1));
でできました
665
(2): 2007/01/24(水)09:21 AAS
gil::transform_channels(pixel1,pixel2,pixel3, ( 1.0/(boost::lambda::_1 - boost::lambda::_2) ) );
がコンパイルエラーになるのですが、
何か見落としているのでしょうか?
1-
あと 336 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.010s