C++

StringPiece というライブラリの話

例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, s…

C++0x メモ

まずは wikipedia http://ja.wikipedia.org/wiki/C%2B%2B0xすごいきっちりまとまってるなぁ… N2670: Minimal Support for Garbage Collection and Reachability-Based Leak Detection (revised) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2…

hash

http://www.jmuk.org/diary/2008/04/09/0http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0804a.html#D20080408-2http://www.kmonos.net/wlog/84.html#_1049080409まぁなんかしんどいのでハッシュでも考えるかと思ってたら kinaba さんが素晴らしいことを…

ラムダ

http://d.hatena.ne.jp/Cryolite/20080213#p1あれー私は lambda って言っても環境は持たないんだと勝手に思ってたんですが、どうやら本気でクロージャを C++ に入れるのかーと今頃気付きました。でhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/…

map

未だに C++ の map の使い方がよくわからんという話。例えば int 型の ID の出現回数を map histogram とかで勘定する場合って map<int, int>::iterator found = histogram.find(id); if (found == histogram.end()) { histogram[id] = 1; } else { found->second++; }</int,>…

Polyglot Quine

http://shinh.skr.jp/dat_dir/poly_quine.txt基本的には上記 4言語の Polyglot quine 。あとまぁ C と PHP でも Quine になる。あなごるだと m4 なんかもまぁ。 C++ が標準準拠してない気がするので気になるなら main に int をつけると良い。実行は以下みた…

メンバ関数へのポインタ

問題です。以下の C++ のコードがどのくらいの数値を出力するかどうかを予想して、実際に確かめてみて下さい。 #include <stdio.h> struct C { void f() {} virtual void vf() {} }; int main() { printf("%p\n", &C::f); printf("%p\n", &C::vf); }まぁうちだと 0x80</stdio.h>…

関数型言語 C++

C++ は JS ほどじゃないにせよ、誤解されてきた言語だと思います。いや、複雑だとかいうのは誤解ではなく紛うことなき真実なのですが、その複雑さがただパラノイアから来た複雑なだけのものではなく、一応の有用性を伴うものだ…っていやそれはわかってそうな…

ラクに vector を作る

そろそろ Google Code Jam です。 Google Code Jam は入力とかが vector とか多い気がするので、 vector の初期化を楽にできるようにしておくとテストとかしやすいかもしれません。昔 Boost sandbox とかでも見た気がしますが、このくらいなら自分でサックリ…

normal ordering

Boost.Spirit の練習がてら、 Mathematica の expand みたいなもの(Mathematicaよく知らんですが、要するに素因数分解の逆)を作ったわけですが。http://shinh.skr.jp/dat_dir/no.ccBoost.Spirit は Parsec よりはちょっと書きにくいかなぁという感じですけど…

動的に型サイズを求めるスマポ

http://d.hatena.ne.jp/okzk/20060622#1150958620から。動的にサイズを調べるのは以下のようなコードはどうでしょうか。先に言っておくと冗談です。 GCC と cl.exe で確認。たぶんきっと他でもだいたい動きますおそらく。 template<class T> class smart_ptr { T* p_;</class>…

たらいべんち

たらいまわしが流行って(いつの話だ)memoがどうとかは考えず、素直な実装でコンパイル中に計算してしまって、その速度を比較してみます。D版。 template tarai(int x, int y, int z) { static if (x <= y) { enum { v = y }; } else { enum { v = tarai!(tar…

100万行を越えるエラーメッセージ

template<int x, int y, int z, bool b> struct tarai_ { enum { x_ = tarai_<x-1, y, z, x <= y>::v, y_ = tarai_<y-1, z, x, x <= y>::v, z_ = tarai_<z-1, x, y, x <= z>::v, v = tarai_<x_, y_, z_, x_ <= y_>::v }; }; template <int x, int y, int z> struct tarai_<x, y, z, true> { enum { v = y }; }; template </x,></int></x_,></z-1,></y-1,></x-1,></int>

strite.cc

strcpy(dst, src);じゃなくて copy(src, src+strlen(src)+1, dst);を使うのはなんかおかしいと思う。まず +1 を忘れるとか。いやそれは私が忘れてただけなんですが。そんなことはどうでも良くて、 strlen を呼んでるのがおかしい。なんで文字列をコピーする…

.new 嫌い

http://d.hatena.ne.jp/m-hiyama/20060317/1142559097に共感を覚えつつ。 Ruby って Kernel#String とか定義してあるのね。 require 'complex' すると Kernel#Complex とかも組み込まれる、と。まぁ必要なクラスだけ定義するのが正解なんだろうけど、これっ…

C++ でポージング

http://www.rubyist.net/~matz/20051027.html#p02を見てそりゃ Ruby の open class の方が強力だろう!って思った人は私だけじゃないと思うのですが、それはともかく C++ でポージングしましょう。http://d.hatena.ne.jp/shinichiro_h/20060112#1137000855と…

g++ ってリンク時再コンパイルできたのか…

-frepo をつけると Sun の SunPro CC 現 Forte みたいな挙動ができるのか… > cat repo.cc #include int main() { std::vector vec; } > g++ -c repo.cc > g++ -o repo repo.o > g++ -frepo -c repo.cc > g++ -o repo repo.o collect: repo.cc を再コンパイル…

g++ がコンストラクタ二つ作る件

高林さんのとこでチラっと出ていたコンストラクタの実体が二つある件について。http://namazu.org/~satoru/blog/archives/000061.html コンストラクタ Tax::Tax() が 2つあるのは、片方はオブジェクトの作成用、もう片方は継承されたとき用のようです。 ここ…

確かに C++ に静的コンストラクタ・デストラクタはあるとは言えないが

無いとも言えないと思います。http://pc5.2ch.net/test/read.cgi/tech/1091185216/821 #define STATIC_THIS_DECL() static void __tmpmethod(); struct __tmp { __tmp() { __tmpmethod(); } }; static __tmp __tmpval #define STATIC_THIS(klass, func) void…

gcc cxx-reflection-branch

gcc に cxx-reflection-branch というものがあるわけです。http://gcc.gnu.org/projects/cxx-reflection/http://gdr.nerim.net/is/C++/reflection/で、これはいわゆるリフレクションなのかなーと思ってたのですが、 Compile Time Reflection と書いてあるわ…

underscore

みなさんご承知の通り、 ・ Each name that contains a double underscore ("__") or begins with an underscore followed by an uppercase letter (lex.key) is reserved to the implementation for any use. ・ Each name that begins with an underscore …

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h