2011-01-01から1年間の記事一覧

Boost.Preprocessor の可変長マクロ引数対応

これはBoost Advent Calendar 2011の5日目の記事です。さて、Boostも徐々にC++11対応が進んでいまして、その中には当然、Boost内で最も利用されている、超有名かつ超重要、某社のサーバでも利用されているという純粋関数型言語C/C++プリプロセッサ用拡張ライ…

可変長マクロ引数の話

これはC++11 Advent Calendar 2011の4日目の記事です。 C++11ではプリプロセッサが可変長マクロ引数に対応しました。例を挙げましょう。 #define ROTATE(...) ROTATE_I(__VA_ARGS__) #define ROTATE_I(x, ...) __VA_ARGS__, x ROTATE(1, 2) // 2, 1 ROTATE(R…

Boostのドキュメントを個別にビルドするためのメモ

必要なもの: xsltproc docbook-xml docbook-xslt doxygen Boost.Geometry python rapidxml (Boost.Geometryのドキュメントビルドするためのツールのビルドに) ※ROOTをJamrootのあるディレクトリとします。 cd $ROOT ./bootstrap.sh cp bjam $パスの通ってる…

生きてることをアピールするために否定演算子の後置をする

C++

私が成仏した、または地獄送りになったのではないかという疑惑を払拭するために大変どうでもいいコードで更新。 http://www.ideone.com/hXj1y 上のコードは window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.t…

モテるミサ力を磨くための4つの心得

こんにちは、一方マネジメントを専攻しているウチドメ嬢です。私は身長も胸も足りませんしゴーグルもないですが、恋愛に関してはプロフェッショナル。今回は、モテるミサ力を磨くための4つの心得を皆さんにお教えしたいと思います。 1. あえて2〜3世代前のケ…

BOOST_FOREACHに添え字を付けてみた

C++

手段と目的が交差するとき、無駄努力が始まる。 ほしいという声を聞いたので、BOOST_FOEACHという素材を活かす方向でなんとか。 #include <iostream> #include <vector> #include <boost/foreach.hpp> #include <boost/preprocessor/cat.hpp> #include <boost/assign/std/vector.hpp>#define INDEX_FOREACH(elem, cont, n) \ INDEX_FOREACH_I(elem, cont, n, </boost/assign/std/vector.hpp></boost/preprocessor/cat.hpp></boost/foreach.hpp></vector></iostream>…

else節のないifを式でやる

C++

:の片側は適当な式で埋めたconditional-expressionでもいいんだけどこういうのもアリね。 #include <iostream> struct hoge { void f() { std::cout << "hoge\n"; } }; int main() { hoge x; false && ((void)x.f(), 0); // if (false) { x.f(); } std::cout << "-----</iostream>…

Phoenix v3で遊ぶ

日記を書かないと死ぬらしい(ソース不明)ので書きましょう。 Phoenix v3がtrunkにあるということで、前に作ったコードを修正しながら遊んでみました。そういえば前は確かapply作ろうとしたらbindになったとか言いましたが、よく考えたらやっぱりapplyでし…

新しいswitch statementのご案内

前に http://ideone.com/7NnRj というのを書いて、その後パターンマッチとかできればうれしいなーと思ったので、そんなものを書いた。書いてるうちにぼくのかんがえたさいきょうのぱたーんまっち。という記事が先に上がってたのでこれお蔵入りかなーとか思っ…

プリプロセス時足し算・引き算・かけ算・剰余演算を定数時間で

http://ideone.com/eK4vc #include <boost/preprocessor/cat.hpp> #define PP_ADD_C(x, y) PP_NAT_TO_LIT(PP_NAT(x) PP_NAT(y)) #define PP_SUB_C(x, y) PP_COMPL(PP_ADD_C(PP_COMPL(x), y)) #define PP_MUL_C(x, y) PP_NAT_TO_LIT(PP_CST_REPEAT(x, PP_NAT(y))) #define PP_MOD_C(x, y) </boost/preprocessor/cat.hpp>…