[過去ログ] Boost総合スレ part7 (989レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(5): デフォルトの名無しさん [] 2009/01/19(月) 21:22:22 AAS
過去スレ
part 6 2chスレ:tech
part 5 2chスレ:tech
part 4 2chスレ:tech
part 3 2chスレ:tech
part 2 2chスレ:tech
part 1 2chスレ:tech
■関連サイト■
Boost C++ Libraries
外部リンク:www.boost.org
Boost 翻訳プロジェクト
外部リンク:boost.cppll.jp
Let's Boost
外部リンク:www.kmonos.net
boost info
外部リンク:shinh.skr.jp
10(3): デフォルトの名無しさん [sage] 2009/01/22(木) 02:09:13 AAS
OS: Mac OS X 10.5.6
コンパイラ: gcc 4.0.1
boost: 1_37_0
この環境で,filesystemをソースからビルドしてパスを通して,
g++ test.cpp -lboost_filesystem-gcc40-mt-1_37
みたいにコンパイルしようとすると,リンカがsymbol not foundとエラーをはきます.
ubuntuでは問題ないためmac特有の問題だと思うのですが,原因,対策がお分かりの方いらっしゃいませんか?
ちなみに,以下がコンパイル結果です.
g++ test.cpp -lboost_filesystem-gcc40-mt-1_37
Undefined symbols:
"boost::system::get_generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in ccCDIN5Z.o
(長いので中略)
libboost_filesystem-gcc40-mt-1_37.a(operations.o)
__static_initialization_and_destruction_0(int, int)in libboost_filesystem-gcc40-mt-1_37.a(operations.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
43(5): デフォルトの名無しさん [sage] 2009/01/30(金) 21:52:32 AAS
更新しました。
外部リンク:booster.x0.to
迷惑という意見が多い様でしたらサイトを閉じます。
81(5): デフォルトの名無しさん [sage] 2009/02/09(月) 22:14:02 AAS
spiritのast_treeの質問なんですが、
//型名など一部省略してます
spirit::rule intp, expp;
intp = leaf_node_d[int_p];
expp = int_p >> *(root_node_d[ch_p(L'+')] >> int_p);
上記のようなルールで、スキップパーサにblank_pを指定して
1 + 2
を構文解析させたとき、スキップ指定しているにもかかわらず、
2つ目の値のツリーの結果に、+から2までの間のスペースが' ''2'といった
感じに含まれてしまうのですが、leaf_node_dはそういう仕様なんでしょうか?
(1つ目の値はスペースは含まれていない)
リーフノードにスペースを含まないようにするには、スキップパーサを指定してても
intp = no_node_d[*blank_p] >> leaf_node_d[int_p];
の様に、ルール側でもスペースを飛ばすしか方法がないのでしょうか?
96(3): デフォルトの名無しさん [sage] 2009/02/14(土) 17:43:19 AAS
>>9595(1): デフォルトの名無しさん [sage] 2009/02/14(土) 16:04:06 AAS
>>94
int_pのみだと空白スキップされることはまでは試して
気がついてたのですが、int以外の自作トークンが使いたいときに
どうすれば良いのかで悩んでます。
やはりno_node_dで空白飛ばすのが正答なんでしょうかね。
バグかも知れんね。
spirit/tree/common.hppの907行あたりを書き換えたら予想通りの結果になったよ。
if (hit) {
std::advance(from, std::distance(from, scanner.first) - hit.length());
return result_t(hit.length(),
factory_t::create_node(from, scanner.first, true));
}
123(3): デフォルトの名無しさん [] 2009/02/21(土) 13:25:35 AAS
boost.graphについてですが、
検索を途中でキャンセルするのは例外を使用するしかない?
例:幅優先で検索し、目的のvertexが見つかったらそこで
検索をやめる。
boost.graph自体は基本的な例外安全は確保されているみたい
なので例外の使用自体に問題はないとは思いますが・・・。
139(3): デフォルトの名無しさん [sage] 2009/02/22(日) 16:50:27 AAS
クラスのメンバ関数をパラメータ的に扱いたいんだけどどうすればいいかな。
こんな感じのことがしたいんだけど。
class A
{
public:
void func_a1();
void func_a2();
};
class B
{
public:
void func_b();
}
template<???>
void call_twice(???)
{
//オブジェクトとメンバ関数を引数にとってメンバ関数を2回呼ぶ
}
int main()
{
A a;
B b;
call_twice(a,func_a1);
call_twice(a,func_a2);
call_twice(b,func_b);
}
161(3): デフォルトの名無しさん [sage] 2009/02/24(火) 20:55:08 AAS
突然ですが、おまえらに問いたい!
boostのイメージカラーは何色?
238(4): デフォルトの名無しさん [] 2009/03/21(土) 12:46:15 AAS
外部リンク:d.hatena.ne.jp
ここのUDP通信のソースで質問なんだけど、
send_to()ではIPとポート指定してるのに、
何故recv_from()では必要無いんですか?
boost::asio::ip::udp::socket がIPとかを記録するんじゃないかと思ったんだけど、
リファレンスマニュアル見ても明確に書いてなかった
262(3): デフォルトの名無しさん [sage] 2009/03/29(日) 14:41:39 AAS
Spiritにて
expr=
(
+(boost::spirit::digit_p)//[&the_func]
>>
*(
(boost::spirit::ch_p('!'))//[&the_func]
)
)//[&the_func]
この3カ所にセマンティックアクション
void the_func(const char* const, const char* const)
を入れたかった。しかし実際やってみると
3つ目のthe_funcの場所「以外」入れられずコンパイルエラーになる。
何で?
305(3): インドリ [] 2009/04/09(木) 10:05:55 AAS
外部リンク[aspx]:blogs.wankuma.com
外部リンク:d.hatena.ne.jp
325(3): デフォルトの名無しさん [] 2009/04/12(日) 20:22:51 AAS
typedef boost::mpl::vector<int, char, std::string> vector;
typedef boost::mpl::if_<boost::is_pod<boost::mpl::_ boost::add_pointer<boost::mpl::_> ,boost::mpl::_> operate;
typedef boost::mpl::transform<vector, operate>::type result;
を、if_cに書き換えたんだけど・・・
typedef boost::mpl::vector<int, char, std::string> vector;
typedef boost::mpl::if_c<boost::is_pod<boost::mpl::_>::type::value, boost::add_pointer<boost::mpl::_>::type, boost::mpl::_> operate;
typedef boost::mpl::transform<vector, operate>::type result;
typedef boost::mpl::transform・・・の行をコメントアウトすればコンパイルは通る。
めちゃくちゃってどこが?
338(3): デフォルトの名無しさん [sage] 2009/04/18(土) 15:35:43 AAS
配列の要素数を変更する予定がなく、
しかしコンテナとしての扱いをしたい。
こんな場合にはboost::arrayがあるらしいですが、
これはstd::vectorよりも効率(速度やバイナリのサイズなど)
が良いのでしょうか?
std::vectorは標準ですからboost::arrayよりも
最適化の研究が(VC++やg++など有名どころで)なされているとか
そういったことは普通ないですよね?
392(3): デフォルトの名無しさん [sage] 2009/04/22(水) 20:53:38 AAS
>>391391(1): デフォルトの名無しさん [sage] 2009/04/22(水) 20:51:14 AAS
>>389
なんで?そんな理屈にはならんよ。
auto_ptrで充分じゃね?
402(5): デフォルトの名無しさん [sage] 2009/04/23(木) 00:40:38 AAS
>388388(2): デフォルトの名無しさん [sage] 2009/04/22(水) 06:13:57 AAS
>const参照だと、実際に使うときに実体が存在しない危険がある。
呼び出し元にはshared_ptrがあるのだから、関数実行中に実体が消えることはないと思うんだけど。
それはshared_ptrのオーナー次第。関数自体はオーナーじゃ無いことに注意する必要がある。
下記はかなり恣意的な例だけど、マルチスレッドプログラムだとすぐ嵌りそうですな。
struct A {
A() : s(new std::string) {};
boost::shared_ptr<string> s;
}
void doom(std::auto_ptr<A> body, boost::shared_ptr<string>& str) {
*str; // boo!!
};
int main() {
std::auto_ptr<A> a(new A);
doom(a, a->s);
}
414(15): 382 [sage] 2009/04/23(木) 19:20:17 AAS
ふーむ。
試しに
void foo(const boost::shared_ptr<MyClass> &p)
{
p->m_func();
}
と
void foo(boost::shared_ptr<MyClass> p)
{
p->m_func();
}
とだけが異なった2種のソースをg++に渡して-O2でコンパイルさせてみたら、
後者の方が大きかったんだが。
とりあえずこのソースに限り、ファイルサイズはconst参照じゃない方が小さく済むみたい。
実行時間は・・・どうやって調べればいいの?
471(11): デフォルトの名無しさん [sage] 2009/04/30(木) 23:11:00 AAS
C++ code - 32 lines - codepad
外部リンク:codepad.org
このコードにて、エラーになる原因が分かりません。
私の考えでは
boost::lambda::bind(func_i, boost::lambda::protect(boost::lambda::bind(my_name, boost::lambda::_1)))
でconst char* constを受け取りintを返す関数が得られるので、
それをlambda_test_funcの引数として渡せるのではないかと思ったのですが。
どこを修正すればよろしいでしょうか?
472(3): デフォルトの名無しさん [sage] 2009/04/30(木) 23:17:13 AAS
>>471
lambda で生成される関数は、関数オブジェクトの一種。
関数へのポインタは C++ 言語上の「関数」を指すことができるけど、
言語上はクラスオブジェクトとなる関数オブジェクトを指すことはできない。
関数と関数オブジェクトを同等に扱うためのものとして boost::function がある。
- void lambda_test_func(int (*func_ptr)(const char* const char_ptr))
+ void lambda_test_func(boost::function<int (const char*)> f)
481(4): デフォルトの名無しさん [sage] 2009/05/03(日) 13:32:00 AAS
>>480480(1): デフォルトの名無しさん [sage] 2009/05/03(日) 12:01:48 AAS
1.39きたぁぁぁ
Boostって結構こまめに更新した方が良いの?
俺のBoostは1.37なんだけど。。。
518(3): デフォルトの名無しさん [sage] 2009/05/07(木) 21:19:56 AAS
>>517517(1): デフォルトの名無しさん [sage] 2009/05/07(木) 20:35:09 AAS
1.39でてたのか
チェックしてくる
1.37->1.39にした俺はspiritの名前空間が変わってて驚いた。
583(4): デフォルトの名無しさん [sage] 2009/05/16(土) 21:42:54 AAS
class rational :
less_than_comparable < rational<IntType
equality_comparable < rational<IntType
less_than_comparable2 < rational<IntType IntType,
equality_comparable2 < rational<IntType IntType,
addable < rational<IntType
subtractable < rational<IntType
multipliable < rational<IntType
dividable < rational<IntType
addable2 < rational<IntType IntType,
subtractable2 < rational<IntType IntType,
subtractable2_left < rational<IntType IntType,
multipliable2 < rational<IntType IntType,
dividable2 < rational<IntType IntType,
dividable2_left < rational<IntType IntType,
incrementable < rational<IntType
decrementable < rational<IntType>
> > > > > > > > > > > > > > > >
ってrationalの定義にあるんだが、これは何??
もしかしてこうするとEmpty Base Optimizationが働くとか!?
655(4): デフォルトの名無しさん [sage] 2009/06/14(日) 15:17:09 AAS
>>654654(2): デフォルトの名無しさん [sage] 2009/06/14(日) 13:13:18 AAS
boost::typeクラステンプレートって何に使うの?
適当な引数として
boost::type<t>* = 0
のように使っているようだが、意図がよく分からん。
C++は関数テンプレートの部分的特殊化ができないが、オーバーロードを使って同じような事ができる。
boost::type<Hoge>とかboost::type<Fuga>とか引数を変えてオーバーロードし、
Function(x, boost::type<Hoge>());みたいな感じで呼び出す。
boost::type<Hoge>はコンパイラの最適化で消えるため、実行時のコスト0で実現できる。
656(3): 654 [sage] 2009/06/14(日) 16:06:02 AAS
>>655
ふーむ。。。
template <typename TIPE>
void Function(int x){〜};
とでも定義しておいて
Function<TYPE>(x);
と呼び出すんじゃだめなのかい?
795(4): デフォルトの名無しさん [sage] 2009/07/30(木) 07:11:28 AAS
C/C++の欠陥はnamespaceが事実上無いことだな
898(5): デフォルトの名無しさん [sage] 2009/08/18(火) 01:17:50 AAS
#include <boost/hoge.h>
としている他は全て自作のライブラリMyLibがあります。
MyLibをソースコードの形で配布する場合、hoge.hの著作権表示をMyLibのソースコードに記す必要はありますでしょうか?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.062s