Grand Central Dispatch
Snow Leopardから,Grand Central Dispatch (GCD)というマルチコア用システムが使えるようになったそうな(Web記事).
要するに,
x = ^{...}
のように{...}で表されるブロックに^を付けることで変数に入れられるようCを拡張して,ブロックをマルチコアで並列に実行するランタイムを提供したもの(キューに突っ込むと並列に実行してくれる),というのが今の所の理解.あってんのかな.
それは,C++0xのラムダ関数ではいかんのか? あと,NSOperationの立場は?
多分,軽いというのと,既存コードに対する変更が少ない,というのが売りなんだろうと想像するけど…
C++の型
C++では,型をclassの中で(typedefで)定義できて,クラス名::型名で参照できる,ということに今更気づいた(というか意識してなかった).vector
あと,vectorとかのコンテナの中では,コンテナ内で保持する値の型が,value_typeとして定義されているので,テンプレートで型としてコンテナを取る場合,その中で保持する値の型を取りたい場合は,typename コンテナ::value_type とかする.typenameは,value_typeが型の名前であることをコンパイラに教えるために必要.
STL使う場合はふつーの話なんだろうけど.ああ,素人くさい.
C++のテンプレート
今更,色々試してハマる.
テンプレート関数の引数に関数へのポインタを渡す時,関数へのポインタの型から返り値の型とか引数の型とかを推論して欲しいんだけど,って言う話.
template <class Ret(*)(Arg)> Ret myfunc(Ret(*f)(Arg), Arg a){ return f(a); }
とか書いてみたんだけど,動かねー.
とよく考えると,こうだった:
template <class Ret, class Arg> Ret myfunc(Ret(*f)(Arg), Arg a){ return f(a); }
こうすると,
int foo(int a){return a;}
みたいな関数があった場合,
myfunc(foo, 1);
みたいに呼べる.(myfunc
C++を普段書いている人には当たり前なんだろうなぁ.
こんなんで,1,2時間はまった.もうじじいなんだろうか.