閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

Boost

Boost.Filesystem - ディレクトリ関係の操作

カレントディレクトリの取得とか。 // 初めてこの関数を呼んだときのcurrent_pathの値 path initial_path(); // カレントディレクトリを取得 path current_path(); // カレントディレクトリを変更する void current_path(path const&); // テンポラリディレ…

boost::filesystem::unique_path関数

unique_path関数は実は引数を取るようになっています。 path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%"); path unique_path(const path& model, system::error_code& ec); デフォルト引数があるため引数を渡さなくても利用できますが、引数を渡…

boost::filesystem::pathに対する操作、問い合わせ

Boost.Filesystemには「pathを受け取って何かする」という関数が用意されています。 問い合わせ namespace fs = boost::filesystem; fs::path const dir("C:\\hom"); fs::path const file("hom.txt"); fs::path const path = dir / file; // ファイル or デ…

boost::filesystem::path

Boost.Filesystemにはファイル名やディレクトリ名といったパスを表すためのpathクラスがあります。 パスに対する色々な操作を行うことができます。 初期化 文字列を渡して初期化します。 boost::filesystem::path path("C:\\hom\\hom.txt"); パスの出力 oper…

Boost.Inspect Tool

Boostのtoolsを眺めていたらInspect Toolなんてものがありました。ライブラリのソースがBoostの求めるガイドラインに従っているか調べてくれるツールのようです。これは構文のチェックなどもしてくれるのかな、と見てみたら、ライセンスの表記がちゃんとある…

bjamのビルド

Boostをビルドするためのツールであるbjam*1はBoostにソースだけ同梱されています。Boostをダウンロードして展開するとルートディレクトリにbootstrap.bat(bootstrap.sh)がありますので、これを実行するとビルドが実行され、ルートディレクトリの下にbjam.ex…

このBoostライブラリは、あのBoostライブラリを利用しています

Boostのライブラリは他のBoostのライブラリを利用して実装されていることが多いです。AsioはThreadを利用していますし、MPLはその他の色々なライブラリの実装の助けになっています。そういった関係を抜き出してみました。ただの暇つぶしで特に意味はありませ…

boost::result_of<>で __stdcall な関数の戻り値を得られないのでどうにかしてみた

どうやら boost::result_of は __stdcall などの修飾子が付いている関数に対応していないようです。 // これはOK (s_result_type は int) typedef int (* success_t)(); typedef boost::result_of<success_t()>::type s_result_type; s_result_type a = 0; // これはNG (e</success_t()>…

Boost.Accumulatorsを拡張する

Boost 1.36.0 から追加された Boost.Accumulators。統計関数がいろいろあるのですが、標準偏差がないっぽいなぁということで、作ってみました。拡張方法はドキュメントに書いてあるようなのですが読んでもよくわからなかったのでソース読みつつ適当にやって…

C++ で delegate

でっちあげてみた。 id:wata_d:20060309:1141873430 と同じ事を C++ で。 #include #include template class Delegater { std::vector > func_; public: Delegater() {} template Delegater(const U& f) { func_.push_back(f); } template Delegater& operat…

boost::shared_ptr が素敵な件 (2)

こうか。 #include <iostream> #include <algorithm> #include <vector> #include <boost/shared_ptr.hpp> #include <boost/bind.hpp> using namespace std; struct base { virtual void print() = 0; }; struct hoge : public base { virtual void print() { cout << "hoge" << endl; } }; struct hige : public base { virtua…</boost/bind.hpp></boost/shared_ptr.hpp></vector></algorithm></iostream>

boost::shared_ptr が素敵な件

物凄い今更ですが、まともに使ったことってあんまりなかったりするので……。どうも生ポインタと比較した時のコストが気になってしまうんですが、まあたまには富豪的にいってみようということで使ってみました。 #include #include #include #include #include…

boost.ntree

boost の Sandbox を眺めていたら tree フォルダが。 ntree というライブラリがありました。 n 分探索木というやつでしょうか。 http://cvs.sourceforge.net/viewcvs.py/boost-sandbox/boost-sandbox/boost/tree/ いずれ boost に入るという認識でいいのかな…

boost の公式サイトの XHTML は XML としてパースできなかった

試しに読むだけ読んでみようと思ったら、link 要素が閉じられていないのでパースエラーが。 XHTML1.0 だとこれが valid なのか……。 HTML をパースできる便利なライブラリがあればまた試してみよう。

boost の公式サイトで RSS 配信しないかなあ

RSS で更新情報が取得できれば、最新版のリリースも見逃さずにすぐに更新できるのに、とふと思った。いまのところ、見る限りでは RSS はないようです。でもこの前のバージョンアップのときに公式サイトが XHTML1.0 でマークアップされるようになったようなの…

ビットフィールド一発定義

ビット演算をビットフィールドで代用する場合、面倒な構造体の定義をしなければなりませんが、それをプリプロセッサを使って一行で済ませてしまおうという試み。……いえ、ただ単に BOOST_PP 使ってみたかっただけです。 #define BITFLD(z, n, _) unsigned nBi…

BOOST_PP_REPEAT の引数ではまった

letsboost::preprocessor(Let's Boost) を猿真似して BOOST_PP_REPEAT を使ったコードを書いたらエラーが出てしばしはまりました。 #define HAGE(n, _) int Hage ## n; BOOST_PP_REPEAT(5, HAGE, nil);こんなのを書いたら、 BOOST_PP_REPEAT の第一引数を 2 …

BOOST_ASSERT

ちらっとソースを呼んでみたら、どうもユーザ定義のアサーションをかますこともできるらしい。BOOST_ENABLE_ASSERT_HANDLER 定数を定義(define)して、boost::assertion_failed関数を定義するだけでBOOST_ASSERTマクロの呼び出し先が変わるようにできているよ…