boost

「Boost.Python で C++ から Python の関数オブジェクトをコールする」より簡便な方法

http://d.hatena.ne.jp/ousttrue/20100204/1265291359たまたま目にしたので。 生の PyObject* を触らなくとも、 #include <boost/python.hpp> void call_python_func(boost::python::object func) { func(123); } BOOST_PYTHON_MODULE(calling_python_func) { boost::python::d</boost/python.hpp>…

Boost.Intrusive のコンテナを hook なしで使う

Boost.Intrusive を使いたい場面は結構あるものの、なんだ hook とか書かなくちゃいけないのか、既存のデータ構造には適用できないのか、と諦めていた。ところが、よくよくソースを読んでみると ValueTraits という trait クラスを指定することで完全にノー…

Boost.Graph の graphviz リーダだけを使ってみる

もう単純に boost::adjacent_list とかその辺に興味がない場合どうすればいいかって話です。適当な MutableGraph コンセプトを実装するクラスを用意してやればまあ一応動くみたいです。 #include <map> #include <string> #include <iostream> #include <boost/property_map/property_map.hpp> #include <boost/property_map/dynamic_property_map.hpp> #include </boost/property_map/dynamic_property_map.hpp></boost/property_map/property_map.hpp></iostream></string></map>

Boost.PHP で SPL のイテレータを実装する

残念ながら所用で参加できなかった モダンPHP勉強会。SPL の発表を Ust 経由で聞いて楽しくなってきたので、Boost.PHP でインターフェイスを実装できるようにしてみた。追記: Boost.PHP の導入については、id:Kiske さんが素敵なチュートリアルを書いている…

Boost.CoroutineとBoost.OptionalとBoost.Pythonを使って、C++クラスの内部イテレータをPythonの外部イテレータとして見せる

追記: うっかり戻り値ポリシーのところで boost::python::return_internal_reference<> を使ってしまい、メモリリークを引き起こしていたので修正しました。Stackless Python であれば continuation が使えるので、Python 側で C++ をまたぐ外部イテレータと…

Boost.Python の機能をざっと紹介してみる

Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介して…

Boost.Python で static property を定義したクラスを含むモジュールをロードしようとするとエラーが出る件

この問題は Python 2.6.3 以降で発生する。たとえば、次のようなモジュールを作成し、 #include <boost/python.hpp> #include <string> class MyClass { public: static std::string get_foo() { return "test"; } }; BOOST_PYTHON_MODULE(_test) { using namespace boost::python; cla</string></boost/python.hpp>…

va_list を Boost.Tuple に変換する

意味あるかどうかわかんないけど思いついたので。↓以下テストコード

C++ で無理矢理 E4X のような XML 埋め込みを実現してみる

追記: id:hasegawayosuke さん曰く「c4xぢゃ?」E4X の E は embedded だと思ってたら ECMAScript だったのか。 まあ AS3 の E4X はなんなんだという話もあるわな…。 ついかっとなってやった。 int main(int, char **) { using namespace xml_builder; xml($ …

Python温泉でやったことのまとめ

実はPython温泉に行っていました。 1日目 夕方まで仕事のバグハンティング。 Boost.Asioを触ろうとコードを書き始める。 途中でBoostをMac OS XのframeworkにしたくなってきたのでBoostのビルドシステムの調査を開始。 夕食。奇妙な自己紹介 (「はじめにお詫…

すごくどうでもいい事だけど

Boost.Variantのドキュメントにある以下の説明は穏やかにBoost.Anyをdisっているように見えなくもない。つか Boost.Any の swap で no-throw が保証されてるのはポインタ同士の交換だからで、それなら別に Boost.Variant でポインタを束ねてもいいし…。 Of c…

Boostのカテゴリ分け

Boostがどんどん肥大化しているのに眉をひそめる人は少なくないと思う。私なら以下のようにカテゴライズして提供しようと考えるけども、いまだにモノリシックなやり方を崩さないのはなんか理由があるんだろうか。ちなみに、以下のリストではライブラリ間の依…

Boost.MPLのlambdaがようわからん

コンテナのリストが与えられたとき、そのすべての要素のvalue_typeが同じであるかどうかを調べるメタ関数を書いているんだけど、腑に落ちないのが以下。 #include <boost/mpl/vector.hpp> #include <boost/mpl/at.hpp> #include <boost/mpl/if.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/bool.hpp> #include <boost/mpl/and.hpp> #include <boost/mpl/lambda.hpp> #include </boost/mpl/lambda.hpp></boost/mpl/and.hpp></boost/mpl/bool.hpp></boost/mpl/fold.hpp></boost/mpl/if.hpp></boost/mpl/at.hpp></boost/mpl/vector.hpp>

Mozo.PHPのアーカイブを更新しました。

オレンジニュースにて紹介していただいたようなので、ダウンロードのリンク先を修正しておきました。RSSリーダで再度上に上がってきてしまった方、すみません。こちらにも念のため: http://voltex.jp/downloads/mozo-php-20080405.tar.bz2

続Boost.GILで遊んでみる。

昨日のサンプルをさらに発展させて、縮拡・回転に挑戦してみた。実際に動作させたところ: http://video.google.com/videoplay?docid=-8908866618776833085 #include <iostream> #include <cmath> #include <boost/lexical_cast.hpp> #include <boost/gil/typedefs.hpp> #include <boost/gil/extension/io/png_io.hpp> #include </boost/gil/extension/io/png_io.hpp></boost/gil/typedefs.hpp></boost/lexical_cast.hpp></cmath></iostream>

Boost.GILで遊んでみる

遊んでいるというか、遊んではいないんだけど。PNG画像を読み込んでアスキーアートぽく出力するサンプル。 #include <iostream> #include <boost/gil/typedefs.hpp> #include <boost/gil/extension/io/png_io.hpp> int main(int argc, char** argv) { namespace g = boost::gil; if (argc <= 1) return -1; g::rgba8_image_t img; g</boost/gil/extension/io/png_io.hpp></boost/gil/typedefs.hpp></iostream>…

Mozo.PHP (その3)

今日の最初の方にリリースしたものはメモリリークします。 本気で使っている方はここから最新版を再度落としてください。 エラー処理 (1) C++ の関数からエラーを出して呼び出し元に復帰したいときは、mozo::php::runtime_error を throw します。 throw php…

Mozo.PHP (その2)

(追記: タイトルの一部にタグを入れているところが正しくタグとして認識されなかったので直しました。重複RSSエントリが発生したらすみません。) 前日の続き。ダウンロードはここ。主な変更点: std::string を戻り値にできないバグの修正。 HashTable の変換…

C関数レベルのクロージャを C++ で実現?

前にlibffi を使ってクロージャが作れることは確認したけど、やや力技過ぎ。 ちょっと調べてみるとid:mb2syncさんの日記 (スターありがとうございました) に c_function というのが紹介されていたので試してみた。 #include <iostream> #include "c_function.hpp" stru</iostream>…

Boost.Python のような手軽さで C++ で PHP の拡張モジュールを書ける「Mozo.PHP (仮称)」

えー、久しぶりにですます調です。本日の第2回PHP拡張勉強会でグダグダながらもちょこっと発表させていただいた、あのライブラリについての紹介です。ダウンロードは以下からできます。 http://www.voltex.jp/downloads/mozo-php-20080324.tar.bz2 最新版は…

BOOST_ALL_NO_LIB

ここに書いた件のフォローアップ。BOOST_AUTO_LINK_NOMANGLE でもやっぱりライブラリ名が指定されてしまうので、BOOST_ALL_NO_LIB を指定するべきでした。追記: typo してしまいました。BOOST_NO_ALL_LIB ではなく BOOST_ALL_NO_LIB が正解です。

Boost の autolink がやたらと鬱陶しい件

Visual Studio や Borland C++ 上で Boost を使ったことがなかったのでまったく意識したことがなかったんだけど、それらの toolset 用ビルドには autolink なるフィーチャーがある。通常、これらの toolset のリンカではユーザは明示的にインポートライブラ…