【C++】Boost使い集まれ!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGDownload/Documentはこちらからどうぞ:
http://www.boost.org/
関連スレ
C++相談室 part11
http://pc3.2ch.net/test/read.cgi/tech/1032345774/
STLスレッド part2
http://pc3.2ch.net/test/read.cgi/tech/1026793823/
0232デフォルトの名無しさん
NGNGこのスレに質問するのは著しく不適切です。
0233デフォルトの名無しさん
NGNGC/C++の宿題なら俺にやらせろ!
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0234233
NGNG0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG>>221じゃないけど、
例えばコンストラクタでnewしてデストラクタでdeleteするとき。
そのポインタをscoped_ptrでラップする。
vectorでもいいけど、オーバースペックかな?と思う時があるのと、
const auto_ptrよりも意味が明確に思えるんで。
0237デフォルトの名無しさん
NGNG俺が良く使うのは、pimpl イディオム使って実装を隠蔽するケース。
0238デフォルトの名無しさん
NGNGなるほど、それは確かに便利ですね。ありがとうございました。
0239デフォルトの名無しさん
NGNGその点、auto_ptr は中途半端。
0240デフォルトの名無しさん
NGNGboost::aryって int hoge[] = {1, 2, 3}; の模倣はできないんですかねえ?
固定長配列、私の用途だと要素数を明示したくないことがしばしば。
0241デフォルトの名無しさん
NGNGs/ary/array/;
anyと混ざった・・・鬱
0242デフォルトの名無しさん
NGNGnext, priorに関連することなのですが、
なんでポインタ型のイテレータ(cont.begin()がT*を返す)
を直接インクリメント(デクリメント)する
のはダメなの?
typedef vector<int> cont_type;
cont_type cont;
...
for(cont_type::iterator it=++cont.begin() //bad!
; it!=cont.end()
; ++it)
{
...
}
文法的にも問題あるようには見えないんだけど...
なにか文法的に矛盾してしまうこととかあるの?
0243デフォルトの名無しさん
NGNGスレ違い。
0244デフォルトの名無しさん
NGNG一応next, priorに関連すると思うんだが…
0245デフォルトの名無しさん
NGNG右辺値と左辺値を勉強してきてくれ。
++ 演算子は右辺値にしか適用できない。
T* は左辺値。
右辺値を返す関数は型が T*&。
0246デフォルトの名無しさん
NGNGレスTHXです。
そっか。考えてみたら、
++246;
と一緒か。
結局スレ違いだった。スマソ...
0247デフォルトの名無しさん
NGNG左右が逆じゃありませんこと?
かくいうおれもよく間違えるんだが。
0249デフォルトの名無しさん
NGNGプログラムを書いてみたのですが・・・・・どういう時に使うとよいのでしょうか?
typedef boost::tuple<int, double, std::string> Btids;
Btids func()
{
return boost::make_tuple(1, 1.1, "abc");
}
int main()
{
Btids x;
x = func();
std::cout << boost::get<0>(x) << ' ' << boost::get<1>(x) << ' ' << boost::get<2>(x) << std::endl;
std::cout << boost::tuples::set_open('[') << boost::tuples::set_close(']') << boost::tuples::set_delimiter(',') << x;
}
0250デフォルトの名無しさん
NGNGtypedef boost::shared_ptr<int> Bsi;
bool ValueComp(const Bsi& bs1, const Bsi& bs2){
return *bs1 < *bs2;
}
int main()
{
std::vector<Bsi> vsi;
vsi.push_back(Bsi(new int(1)));
vsi.push_back(Bsi(new int(4)));
vsi.push_back(Bsi(new int(3)));
vsi.push_back(Bsi(new int(5)));
vsi.push_back(Bsi(new int(2)));
std::sort(vsi.begin(), vsi.end(), ValueComp);
std::vector<Bsi>::const_iterator pos = vsi.begin();
while (pos != vsi.end())
std::cout << *pos++ << std::endl;
}
0251デフォルトの名無しさん
NGNG*pos++を**pos++としたら数字は表示されました。
しかしまだソートがうまく行きません。
0252デフォルトの名無しさん
NGNGboost::shared_ptrはstd::auto_ptrと違い、コンテナに入れてソートしても
いいんですよね。
0253デフォルトの名無しさん
NGNGVC6SP5 でうまく行っておりまする・・・。
0254デフォルトの名無しさん
NGNGありがとうございます。
ついでなのですが、ValueCompを次のような叙述関数で書くべきなのでしょ
うか?これはboostの質問ではないですね。
struct ValueComp : public std::binary_function<const Bsi&, const Bsi&, bool> {
bool operator()(const Bsi& bs1, const Bsi& bs2) {
return *bs1 < *bs2;
}
}
0255デフォルトの名無しさん
NGNGメシ食ってたYO!!!
関数オブジェクトを用いる一番の利点は、コンパイラに処理をインライン展開
させる事らしい。
250 の書き方だと関数ポインタが発生するから、インライン展開できなくなる。
not2() とかも使えないし。
それでもいいなら好きなように。
0256デフォルトの名無しさん
NGNGありがとうございます!!手間を惜しまず関数オブジェクトにします!
0257デフォルトの名無しさん
NGNG>++ 演算子は右辺値にしか適用できない。
適用すると右辺値になる、が正解じゃないの?
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNGあの辺の構文てオナニーにしか見えないんだが。
開発者のジョークだろ。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGstd::sort(v.begin(),v.end(),*_1 < *_2);
と書くほうが 関数オブジェクト用意するより見やすくない??
ifだとか色々使うのはもう潔く関数オブジェクトにしたほうがいいとは思うけど
0262デフォルトの名無しさん
NGNG意地でもワンライナーな皆さんを応援しちゃうぞ、みたいな。
# 好んで使いますが(w
0263デフォルトの名無しさん
NGNGできる所がうれしい。
難を言えば、gccぐらいでしか動かない事かな。
composeってcompose_f_gx_hyとか?あれは欲しいよ。二つの文字列
をある基準で比較する時なんかにstd::lexicographical_compareと
組み合わせてよく使っている。
0264デフォルトの名無しさん
NGNGcomposeの奴、書いてみてー。
0265デフォルトの名無しさん
NGNGSTLスレッドからの転載だけど、例えばstringを大小文字区別しないで辞書順に
挿入したりソートしたりする時とか。
struct StrCmpi {
bool operator() (const std::string& s1, const std::string& s2) const {
return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(),
boost::compose_f_gx_hy(std::less<char>(), std::ptr_fun(std::toupper), std::ptr_fun(std::toupper)));
}
};
int main()
{
typedef std::map<std::string, size_t, StrCmpi> Ssize;
Ssize mp;
mp.insert(std::make_pair("test1", 123));
mp.insert(std::make_pair("Test2", 456));
Ssize::const_iterator pos;
for (pos = mp.begin(); pos != mp.end(); ++pos)
std::cout << "string = " << pos->first << ", size_t = " << pos->second << std::endl;
}
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNGstruct StrCmpi : public std::binary_function<const std::string&, const std::string&, bool> {
bool operator() (const std::string& s1, const std::string& s2) const {
return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(),
boost::compose_f_gx_hy(std::less<char>(), std::ptr_fun(std::toupper), std::ptr_fun(std::toupper)));
}
};
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGptr_fun使わないで、関数オブジェクトを呼び出すようにすれば
いいじゃん。その代わり既存のライブラリは使えなくなるが。
0270デフォルトの名無しさん
NGNG後者だったりする場合、boostって使えてますか? 使ってる人感想きぼうん
0271デフォルトの名無しさん
NGNGhttp://216.239.33.100/search?q=cache:hOeO5TxQ0e8C:boost.sourceforge.net/regression-logs/cs-linux.html+Kylix+boost+bind&hl=ja&ie=UTF-8
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGBCCはboost::lambda、boost::format、boost::array、boost::multi_array以外は
だいたい通るよ。kylixが糞なのだと思う。
0274デフォルトの名無しさん
NGNG今 C++ コンパイラ作り直してるから、それが出て完成度が高まるまで
待つしか。
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNGある人いる?
0277デフォルトの名無しさん
NGNGboost使っても、コードの中に"boost"とかいう文字列でも入らなければ、
使った事はまずわからないような気もするが。
テンプレートライブラリはそういう点ズルができそう。
0278276
NGNG$ g++ hoge.cpp
$ nm a.out |grep boost
080493fc W _ZN5boost12lexical_castISsiEET_T0_
0804a3ea W _ZN5boost16bad_lexical_castC1ERKS0_
0804a3ca W _ZN5boost16bad_lexical_castC1Ev
0804a488 W _ZN5boost16bad_lexical_castD0Ev
0804a40c W _ZN5boost16bad_lexical_castD1Ev
0804a4c2 W _ZNK5boost16bad_lexical_cast4whatEv
0804b00c V _ZTIN5boost16bad_lexical_castE
0804a548 V _ZTSN5boost16bad_lexical_castE
0804b018 V _ZTVN5boost16bad_lexical_castE
$ strings a.out |grep boost
N5boost16bad_lexical_castE
$ strip a.out
$ strings a.out |grep boost
N5boost16bad_lexical_castE
0280デフォルトの名無しさん
NGNG.?AVbad_any_cast@boost@@
boost::bad_any_cast: failed conversion using boost::any_cast
.?AVuse_count_is_zero@boost@@
0281デフォルトの名無しさん
NGNGだよね。きっと。
0282デフォルトの名無しさん
NGNGたとえば regex.hpp には次のような条がある。
/*
*
* Copyright (c) 1998-2002
* Dr John Maddock
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Dr John Maddock makes no representations
* about the suitability of this software for any purpose.
* It is provided "as is" without express or implied warranty.
*
*/
ということで、バイナリには "Copyright (c) 1998-2002 Dr John Maddock"
を埋め込んで、ドキュメントには上の条文全文を記しておけばよいらしい。
でも不安なのは、"this software" というのが何を指すかだ。こちらが作った
プロダクト全体を指す、とか解釈されたらたまらんw
0283続き
NGNG// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
// Copyright (c) 2001, 2002 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
// See http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation.
//
となっている。こちらは copyright notice だけでよいらしい。
でも、"the above copyright notice" じゃなくて、"this copyright notice"
になっているところが不安。まさか条文全体のことを指してるとかw
0284デフォルトの名無しさん
NGNG[copyright.h]
namespace {
const char* regex_hpp = "Copyright (c) 1998-2002 Dr John Maddock";
const char* scoped_ptr_hpp = "(C) Copyright Greg Colvin and Beman Dawes 1998, 1999."
"Copyright (c) 2001, 2002 Peter Dimov";
}
とでもしておいて、boostをincludeするときにコイツも一緒にincludeすればいいかな。
ありがとう。
0285デフォルトの名無しさん
NGNG基本的にMITとか変形BSD的なライセンスだから、そんなに気にせんでいいと思うが。
・ソースを公開するときにはboostのライセンス表記をそのまま残す
・ドキュメントにはCopyRight表記を残す
で。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGコメントじゃいかんの?
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGといわれても、普通は#includeするだけだから残すもなにもないとおもうんだけども。。
0293デフォルトの名無しさん
NGNGライブラリ部分を改変した場合の話なんじゃ?
0294デフォルトの名無しさん
NGNGなる舗道
0295デフォルトの名無しさん
NGNG・バイナリへの埋め込みは推奨(義務ではない)。
・作成したプログラム等に付属するドキュメント等には
明記する必要はなし。
・ライブラリを改変等した場合に©表記の必要が
でてくる。
であってる?
0296デフォルトの名無しさん
NGNG・作成したプログラム等に付属するドキュメント等にはライブラリ冒頭の
ライセンス条項をそのまま転記する必要がある(*)。
・ライブラリを改変等した場合に元のライブラリ冒頭の?表記を削除
してはいかん。
(*)必要ないライブラリもある(scoped_ptr他)
だと思われ。
0297デフォルトの名無しさん
NGNGs/?表記/copyright表記/
化けてしまったよ。
0298デフォルトの名無しさん
NGNGboostも使っている人っています?boost使うことを密かに画策中なんですが。
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGおいおい
0301デフォルトの名無しさん
NGNG僻むほど難しくないから使ってごらん。
ほんとに。
0302デフォルトの名無しさん
NGNG簡単ですがそれが何か?
0303298
NGNG0304デフォルトの名無しさん
NGNG0305298
NGNG僕は便利だと思っているのですが、それはどうやら間違った考えだったので304=299さんのように
boostなどはきっぱりと使うのをやめ、まっとうなコーディングに戻ります。
お導きありがとうございました。
...とでも言って欲しいんでしょうか?意図を量りかねる。
0306デフォルトの名無しさん
NGNG> 意図を量りかねる。
それは馬鹿だから。
0307299
NGNGperl >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> boost
0308デフォルトの名無しさん
NGNGperl厨のせいにしようとしてるよ。
必死だな。よっぽど悔しかったと思われる。
0309デフォルトの名無しさん
NGNGいろいろ試しているんだけどよくわからない・・だれかhelp.
typedef boost::indirect_iterator_pair_generator<
std::vector<var*>::iterator, // 元になるイテレータ(or ポインタ)
var // operator*(operator*())が返す修飾なしの型
// ここにconstと非constについての参照型やポインタ型が並ぶが省略可
> iterator_gen; // とりあえず命名
std::vector<var*> var_list;
iterator_gen::iterator i(var_list.begin());
iterator_gen::const_iterator j(var_list.begin());
0310デフォルトの名無しさん
NGNG面白かつ便利そうなので使ってみようと思うのですが,いまいち情報が少なくて...
コーディングしたときの速度なんかについても教えてほしいです.
やはり,便利と速度は両立しないのでしょうか?ここが特に気になります.
0311デフォルトの名無しさん
NGNGbind, iterator_adaptors あたりは、最適化(inline化)しないと遅いかもしれない。
でも、最適化かければぐちゃぐちゃにinline化されてなかったことになる(言い過ぎ)
のであまり気にしてない。
そもそも、boostと一口にいわないで、boostのどれ、と言わないと答えにくいと思われ。
0312デフォルトの名無しさん
NGNGどうinline化されるのか見たいんだけど、asm出力見る以外の方法ないかな?
http://public.kitware.com/GCC_XML/HTML/Index.html を使うのはどうかと
妄想しているんだけど使ったことあるひといません?
0313デフォルトの名無しさん
NGNGregex++を使いたいと思って入れてみたんですが,
CodeWarrior5用のプロジェクトファイルは発見できたものの,
8では読み込めずどうしたものかと。。。
regex++の場合は単に,hppをincludeすればいいというわけにはいかないんですよね?
0314デフォルトの名無しさん
NGNGtemplate<typename A> struct iterator_gen :
boost::indirect_iterator_pair_generator<
std::vector<A*>::iterator,
A
> {};
あと適当にHelper関数作ったほうが便利だと思うけど、
std::iterator_traitsとかboost::type_traits の詳細を忘れた。。。
0315デフォルトの名無しさん
NGNGvc60にて、"boost/lambda/lambda.hpp" をインクルードしただけで
"fatal error C1001: 内部コンパイラ エラー" というエラーが発生してコンパイルができません。
回避方法をご存知の方がいらっしゃったら教えてください。よろしくお願いします。
0316デフォルトの名無しさん
NGNGhttp://www.boost.org/status/cs-win32.html
無理そう。。。。
0317デフォルトの名無しさん
NGNG無 駄 で す
0318rubyist@カラアゲうまうま
NGNG0319デフォルトの名無しさん
NGNG「2003年初頭リリースのMicrosoft C++コンパイラ新版では
ISO C++標準に対して98%近い準拠になる」
残り2%の非対応部分にboostが引っ掛かってしまう悪寒
0320デフォルトの名無しさん
NGNGhttp://www.zdnet.co.jp/news/0211/09/nebt_03.html
こんな肩書きの仕事があるんだねえ。
0321デフォルトの名無しさん
NGNGそこりの2パーセントがなんなのかを列挙して欲しいところですな。
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG読んでるんだが、ここに出てくる "intrusive counting" とか
"intrusive-counted smart pointer" の意味がよく分かりません。
誰か教えてくだされ。
0325デフォルトの名無しさん
NGNGつまり、参照カウントであれリンクリストであれ、管理される対象としての
オブジェクトの中身をいじるようなのがintrusive (侵入的) と呼ばれるわけだね。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG存在することの方が驚きだ(ぉぃ 具体的に、どのあたりの処理系が
サポートしてるんでしょう? ちょっとドキュメント読んでみたいぞ。
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGどうもありがとうございました。
0331デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています