【preprocessor】 Can it be used with C? C90標準に従っているコンパイラなら動くはず、と。
boost::shared_ptr ライブラリは非常に便利で、プログラムスタイルをまったく変えてしまいます。礼を挙げながら便利な使い方を説明しましょう。 オブジェクト指向の便利な点のひとつには、「仮想関数」を呼び出す点になります。しかし、生のポインタを扱うと、メモリリークがおきやすくなります。 たとえば、 animal *p1, *p2; p1=new dog("dog"); p1=new cat("cat");//ここで、メモリリーク! p2=p1; p1->bark(); p2->bark(); delete p1; delete p2; となってしまいます。そこで、 boost::shared_ptr<animal> p1, p2; p1=boost::shared_ptr<animal>(new dog("dog")); p1=boost::shared_ptr<anim
regex:正規表現を扱う(ラッパのgimite::reg_manager使用) #include <string> #include <iostream> #include <gimite/reg_manager.h> void main(){ gimite::reg_manager rm; std::string s= "<h1>Title</h1>Hello."; if (rm.search(s, "<h1>(.*?)</h1>")) // 検索 std::cout<<rm.str(1)<<std::endl; // 前方参照 rm.replace(s, "<h1>(.*?)</h1>", "<p>\\1</p>", "g"); // 置換 std::cout<<s<<std::endl; } 出力: Title <p>Title</p>Hello. ラッパなんぞ使わんわ!という方は
2006-06-30 昨日予告したように、今回からテンプレート・メタプログラミングに関する話題を取り上げていきたいと思います。C++のテンプレートは、元々は型 T のコンテナを実装する程度の用途しか想定されていなかったのでしょうが、STLやBoost C++ Librariesなどを見ても分かるように、非常に広い用途に利用されています。 今回は、テンプレート・メタプログラミングの最も基礎にあたる「メタ関数」を取り上げてみたいと思います。(メタではない)普通の関数は、引数として値を受け取り、返却値として値を返します。そして、関数として定義された内容は、実行時に解決されます。 しかし、メタ関数では、引数として型または定数値を受け取り、返却値として型または定数値を返します。そして、メタ関数として定義された内容は、コンパイル時に静的に解決されます。もちろん、メタ関数の引数や返却値というのは、普通の
Boost C++ Libraries ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards C++ Organizations C++ Standards Committee Issues lists and papers give insight into current status and future directions. Association of C & C++ Users Over 2400 book reviews, and lots more. Online Publications The C++ Source "Th
私は「Boostを使って」ではなく「Boostを作って」勉強している 仕事ではBoostを使いたくても使えないことが多いだろう (「フリーのライブラリなんて使っちゃダメ」とか言われて) そこで、Boostの必要なもののみを作って使用している 各機能をヘッダーファイル1本で提供できるので移植もしやすいだろう このブログで紹介したものを以下にまとめる(※随時更新) 【Boost本家】 Boost C++ Libraries Boost C++ Libraries(cppllによる翻訳) 【Boostからの移植】 ・shared_ptr 参照カウント付きスマートポインタ ・shared_array 参照カウント付きスマートポインタの配列版 ・array 固定長配列 ・lexical_cast 数値と文字列の相互変換 ・type_traits 型特性 ・scope_guard ・static_as
Boostは1.36.0あたりからC++0x対応が始まってて、いくつかのライブラリはすでに右辺値参照に対応しています。 Boost 1.39.0からはC++0xの可変引数テンプレートに対応するらしく、 shared_ptrを生成するmake_sharedヘルパ関数が追加されるようです。 (明日あたりβ版という噂があったりなかったり。) 可変引数テンプレートに対応すれば、bindやfunctionといった多くのライブラリが読みやすくなるので楽しみです。 あと、Boost.Fusion0xというプロジェクトもあるみたいです。 現在の実装を見る限りは今後に期待って感じですね。 (型リストの長さを再帰で計算してたり。) 追記: make_sharedはBoost 1.36.0からあったみたいです。 1.39.0では可変引数テンプレート版が用意されます。
Boost.String Algorithmにあるsplit便利ですね。 今まで自分で作ってました。 #include <iostream> #include <vector> #include <string> #include <boost/algorithm/string.hpp> #include <boost/foreach.hpp> #define foreach BOOST_FOREACH using namespace std; using namespace boost::algorithm; int main() { string s = "a b c"; vector<string> result; split(result, s, boost::is_space()); // スペースで区切る foreach (const string& item, result)
boost::uint_t を使うと出来るみたい #include <boost/integer.hpp> template <class T> struct add_unsigned { typedef typename boost::uint_t<sizeof(T) * 8>::least type; }; /************/ #include <iostream> #include <typeinfo> int main() { std::cout << typeid(unsigned int).name() << std::endl; std::cout << typeid(add_unsigned<signed int>::type).name() << std::endl; }
朝から鼻がつまってるし、頭痛が激しいし、気持ち悪い。かつては花粉症じゃなくて純粋に鼻炎だったのだが、どうにもこうにも、花粉症になっちゃったのか、風邪引いたのか。うーん、だるい。 とりあえずWindowsでのプロセス生成と標準入出力のつなぎ換えができたが、processの生成とかpipeとかboostに入ってればいいのにな、と思ったらこんなものが。 http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostProcess マジスカと思ったが、まだ議論中みたいですな。コンストラクタでプロセスを生成して、<<と>>で入出力すると。もうちょっとで作っちゃうところだった。危ない危ない。そういえば、Boost.Socketなんてのも議論されてるみたいですね。さて、議論にあがるくらいだから既存のものがあるのかと思ったら、リンク
アルファベット順ライブラリリスト カテゴリ別ライブラリリスト 文字列とテキスト処理 コンテナ イテレータ アルゴリズム 関数オブジェクトとより高位のプログラミング ジェネリックプログラミング テンプレートメタプログラミング プリプロセッサメタプログラミング 並列プログラミング 数学と計算 正当性とテスト データ構造 入出力 言語間サポート メモリ 構文解析 その他 不完全なコンパイラの回避手段 どのライブラリがどのコンパイラで動くかを理解するには Compiler Status. ライブラリのダウンロード,ビルド,インストールについてはGetting Started. アルファベット順ライブラリリスト any - 異なる型のひとつの値を格納できる、安全で汎用的な入れ物。Kevlin Henney 作 array - STL に準拠した定数サイズの配列のラッパコンテナ。Nicolai Jos
ライブラリ . ドキュメント: 最新のリリース CVS(毎日更新) . ライセンス . Getting Started . 退行テスト: 一般的な情報 テスト結果 メーリングリストと ニュースグループ . Boost (Developers) . Boost Users . Project-Specific . Announcements . Discussion Policy サポート . FAQ . Request Support . Report Bugs . Suggest Features . Commercial Support . Also: Mailing Lists About . Formal Reviews . Review Schedule . Requirements . Guidelines . Submissions Other Resources . Fil
[ Japanese | English ] In this project, we are translating the document of Boost C++ Libraries into Japanese. If you are interested in this project, please join us!! For details, see also how to join. Boost C++ Libraries http://www.boost.org/ Project Home Page http://boost.cppll.jp/ Mailing List http://lists.sourceforge.jp/mailman/listinfo/boostjp-developer Workspace (Sourceforge.jp) http://source
「超汎用関数ポインタ」のコメントより boost::functionは難しくてギブアップ・・・ 可変長のオーバーロードをどうやって解決しているのか が知りたかったんだけど、 (以下略) C++ の真骨頂はプリプロセッサとテンプレートを駆使したメタプログラミングにある。メタプログラミングこそが、C++ を他言語の追随を許さない超言語に押し上げていると共に、比類なき難度を持った言語にしている。 boost::function も、そこそこにメタしている実装のひとつだ。 とりあえず、プリプロセスされていない状態では理解が難しいので、プリプロセスだけ実行する。そうすれば格段にソースコードは読み易くなる。Visual C++ なら「/E」「/PE」「/EP」コンパイラオプションを使うと、プリプロセスした結果が得られる。 以下は、boost::function をプリプロセスした結果の抜粋だ(実装は省
説明 いい加減情報まとめろや、日本のC++コミュニティ。 残念ながら、日本にC++コミュニティなんてありません。 とか思ってとりあえず作りました。 えーと、K.INABA氏の Let's boost がほとんどの解説を書いてしまわれました。 凄すぎる… これ、あんまりいらなくなってしまいましたが、 別のアプローチの説明が見たい人とかは一応参照されたし。 参考 解説が多い順にならべてみました。 K.INABA 氏の Let's boost 私の boost user Hattareme Programming Rei Suzuki氏のカレー温泉 LaLa Moo-Moo氏の C++ Libraries επιστημη氏のC++TechnicalDocument OKA Toshiyuki氏の C++ Labyrinth cppll 実物 お名前 サンプル 詳説
parse_info<> を使ったパージング ループは、およそ次のようになるだろう。 IteratorT first, last; rule<> r; while ( first != last ) { // パージング実行 parse_info<IteratorT> info = parse( first, last, r ); // パージングに失敗したらループを終了 if (!info.hit) break; // 次のパージング位置を設定 first = info.stop; } grammar<> 文法を定義するには、grammar<> という基底クラスから派生させたクラスを用いるのが便利である。 grammar<> は、派生させるクラスを引数とするクラステンプレートで、 そのスケルトンは次のようになる。 (The Grammar より引用) struct my_grammar
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く