C++

な〜にがStrongTypedefじゃ

C++

この記事はC++ Advent Calendar 2012の20日目の記事です. 前の記事 : Boost.Asioによる非同期関数呼び出しと、非同期ノンブロッキングFuture 次の記事 : CEANによる配列操作 導入 ある型に別名を付けるtypedefに対して,ある型を元に新しい型を作る機能をst…

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…

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

C++

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

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でし…

明日から使える boost/preprocessor/facilities/*

C++

やったーC++ Advent Calendarすっかり忘れていました。 今日は数あるBoost.PPのマクロのうち今一つ何がしたいのか分からない連中にスポットを当ててみたいと思います。 BOOST_PP_IS_EMPTY 例えばコンパイルフラグとしてHOGEが定義されていたとします。gcc -D…

Boost.勉強会#3で適当なことをしゃべってきました

C++

私の発表資料: http://www.slideshare.net/digitalghost/preprocesstime-lambda-expression ソース: http://patch-tag.com/r/digitalghost/pplambda/home , http://sites.google.com/site/ilikemanaka/code/pplambda.tar.bz2 あぁどうしよう。今回は大阪開…

よく分からない話

C++

一つめのアレは実は「え、RVO?」とか思ってたけど、そうかmakeSの呼び出しがRVOされるのかー。 C++.Tのオーバーロード解決の話はなんか void f(int); template<typeid T> where { ConceptA<T> } void f(T); template<typeid T> where { ConceptB<T> } void f(T); template<typeid T> typename en</typeid></t></typeid></t></typeid>…

Boost.勉強会#2にいってきた話を書こうと思うけど、めんどくさいからどうしようか悩んでいる

勉強会で配る用の名刺を作らねばとプリンタのインクと名刺用の紙を買ってきたわけですが、前日の夜にハードディスク整理を始めたから名刺作る時間がなくなってきた上に、家のプリンタが大きすぎて名刺印刷できなかった。やることがあるときに限って掃除をし…

C++WG Adhoc Conferenceに行ってきました(の書きかけ)

C++

出発〜懇親会まで 5/29、このような会議があるということで、参加させていただきました。 赤坂で10時から、ということで、だいたい3時間半あればいけるかなと思ってそんな感じで時間を見て出発した。お近くのみどりの窓口にて新幹線の指定席の予約を取ろうと…

C++/CLIについてのよくある誤解

以前にも書いたような気がしますが、もう一度書きます。C++/CLI(仕様の邦訳)は、.netからC++やその他ネイティブコードのライブラリを楽に使えるようにするためと、そのための作業を楽に行うための言語です。「.netで使えるC++」ではありません。そういうこ…

Spirit.Phoenix に apply がなかったので作ろうと思ったら bind ができたでござる

C++

名前は apply だけど bind だよ。ちなみに boost::phoenix::bind よりすごい点は、 bind の第一引数を placeholder にできるところ。 あとC++03とC++0xの両方の場合で作ったけど、C++0xおいしいです (^q^)#include <boost/config.hpp>#if defined(BOOST_HAS_TR1_UTILITY) && !d</boost/config.hpp>…

時代はBoost.Lambdaではなく、Spirit.Phoenixなのだ

C++

#include <boost/spirit/home/phoenix/core.hpp> #include <boost/spirit/home/phoenix/operator.hpp> #include <boost/spirit/home/phoenix/scope.hpp> #include <boost/spirit/home/phoenix/bind.hpp> #include <boost/spirit/home/phoenix/function.hpp> #include <boost/spirit/home/phoenix/statement.hpp> #include <…</boost/spirit/home/phoenix/statement.hpp></boost/spirit/home/phoenix/function.hpp></boost/spirit/home/phoenix/bind.hpp></boost/spirit/home/phoenix/scope.hpp></boost/spirit/home/phoenix/operator.hpp></boost/spirit/home/phoenix/core.hpp>

tieで初期化させろ take 2

このような指令が来ましたので、やりましょう。 #include <utility> #include <tuple> #include <iostream>#include <boost/preprocessor/tuple/elem.hpp> #include <boost/preprocessor/tuple/eat.hpp> #include <boost/preprocessor/tuple/rem.hpp> #include <boost/preprocessor/seq/seq.hpp> #include <boost/preprocessor/seq/size.hpp> #inc…</boost/preprocessor/seq/size.hpp></boost/preprocessor/seq/seq.hpp></boost/preprocessor/tuple/rem.hpp></boost/preprocessor/tuple/eat.hpp></boost/preprocessor/tuple/elem.hpp></iostream></tuple></utility>

チェックしてるのはそこじゃない

C++

http://d.hatena.ne.jp/akiradeveloper/20091231/1262264357 すると、first_argument_typeとかがないよって怒られる。いやいや、怒り方違うだろと。binaryじゃないとダメだよって怒るのがふつう。 本当はそういう風にコンパイルエラー出してほしいのですが、…

話題に乗り遅れ感抜群のlexical_castの話

C++

もとの話はこのあたりとかこのあたり。 いっそのことポリシーとか何も書かなくても良きに図らってよ!というわけで、そういうものを書いてみるなど。 #include <typeinfo> #include <sstream> #include <string> #include <boost/optional.hpp> #include <boost/lexical_cast.hpp>namespace detail { template<typename Target, typename Source> struct lcast_auto_erro</typename></boost/lexical_cast.hpp></boost/optional.hpp></string></sstream></typeinfo>…

オーバーロード自動生成ソース

追記:発表の資料にもあった例ですが、make_tupleだと別に非const参照をオーバーロードする必要はないので、型Tのコンストラクタの引数を受けとって、その引数から作ったTの値を保持するmy_smart_ptrを返す関数と変更しておきました。追記ここまで #include <boost/preprocessor/arithmetic/inc.hpp></boost/preprocessor/arithmetic/inc.hpp>…

BOOST_SCOPE_EXIT_ENDは消せないのか?

C++

http://twitter.com/cpp_akira/status/5995895644 中身は追ってないけど、 BOOST_SCOPE_EXIT_END はどうにかならないのかなー、とか http://twitter.com/DecimalBloat/status/5996160887 SCOPE_EXIT_ENDを消すのは無理っぽいです。詳しく書くとややこしいの…

Boost.勉強会でセッションやります

http://atnd.org/events/1839 には既に書いてありますが、Boost.Preprocessorをお題目に30分ぐらいやります。まぁ時間配分とかは全然分からないので、適当にやります。 何か当日はustでも配信されるらしいので、私の無惨な姿を見たいなら要チェケラ!

Boost.勉強会のお知らせが来たので

C++

http://atnd.org/events/1839 http://d.hatena.ne.jp/faith_and_brave/20091015/1255594060 http://d.hatena.ne.jp/faith_and_brave/20091016/1255665216 参加しましょう。というか猛烈な速度で参加人数が増えていますが…追記:すごい勢いにつき、あっという…

1から10まで足すんだって、プリプロセッサで

ネタ元:http://d.hatena.ne.jp/RiSK/20090930/1254307989 同じ方法でやっても面白くないので、なんか違うアプローチをとってみました。 #include <boost/preprocessor/repetition/repeat.hpp> #include <boost/preprocessor/repetition/repeat_from_to.hpp> #include <boost/preprocessor/seq/size.hpp>#define PAREN_I(z, n, d) BOOST_PP_REPEAT(n, PAREN_II, _) #…</boost/preprocessor/seq/size.hpp></boost/preprocessor/repetition/repeat_from_to.hpp></boost/preprocessor/repetition/repeat.hpp>

プリプロセッサでFizzBuzz

ネタ元:http://d.hatena.ne.jp/bleis-tift/20090929/1254185496 #include <boost/preprocessor/arithmetic/inc.hpp> #include <boost/preprocessor/arithmetic/mod.hpp> #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/control/expr_iif.hpp> #include <boost/preprocessor/control/iif.hpp> #include <…</boost/preprocessor/control/iif.hpp></boost/preprocessor/control/expr_iif.hpp></boost/preprocessor/cat.hpp></boost/preprocessor/arithmetic/mod.hpp></boost/preprocessor/arithmetic/inc.hpp>

プリプロセッサで再帰しましょう!

みなさまいかがお過ごしでしょうか?さて、今日のテーマは「再帰」です。プリプロセッサでは再帰が扱えないので、例えば、 #define PP_APPLY(f, x) f(x) #define HOGE(x) PP_APPLY(PIYO, x)という定義があったとして、 PP_APPLY(HOGE, FUGA)とか書いてあると…

ターヘル・アナトリア(東京見聞録)2

しばらくすると、めるぽんさんが来た。そういえば指定されたのは確か階段降りたところだっけ…また間違えたのか…なんかもう自分がどうしようもない。階段を降りると、id:wraith13 の道化師さんと、 片手にC++ Templatesを提げた id:uskz さんがおられた…なん…

ターヘル・アナトリア(東京見聞録)1

あまりにも長くなりそうなので適当に投下。 まずuskzさんと合流できなかった。待たせてしまった上に結局現れられなくてほんとうに申し訳ないです… とりあえず新大阪駅近くのネカフェに入り、twitterにて id:melpon さんに相談に乗っていただき、夕方、委員会…

template specialization

C++

template<typename T> struct a { template<typename U> struct b { template<typename V> void f(V) {} template<> void f<int>(int) {} }; template<typename U> struct b<U*> { int x; }; }; void f() { a<int>::b<int*> y; y.x; a<int>::b<int> z; z.f(1); }特殊化は定義したスコープでも書けるのか…</int></int></int*></int></u*></typename></int></typename></typename></typename>

多相型ラムダ作ろうとして肝心なことに気付いてやめるまでのメモ書きそのまま公開

C++

あと http://d.hatena.ne.jp/DigitalGhost/20090216/1234793120 は0引数のとき対応できない。だからポインタを作ってというのもあるのかも知れない…ダミーパラメータで0とか付ければなんとかなるか…あーそうか、typeof(a)とか型定義の中だとaが見えないから…

副産物

C++でDとかC#のデリゲートっぽい物体自動生成機を書こうとしたけど id:xyuyux さんが既に完成させはったということで、私は副産物でも。 http://codepad.org/ZECUiV5V (OPEN から END) まで、括弧がバランスなら何書いても引数に取って展開できるマクロの仕…