2009-09-01から1ヶ月間の記事一覧

PrevRef: 前回値参照ループをサポートする汎用ファンクタ

C++

今回は前回に考えたPrevsMustGoクラスの抽象度を上げたクラスを考えてみるぞ。PrevsMustGoは、前回値を参照するループ処理を、for_eachで行えるようにするための試みなんだったね。今日発表するPrevRef ファンクタ(ソースは以下)はその汎用性を高めたもの…

前回値prevを使ったループ処理もfor_eachで

C++

やあみんな元気にしてるかい。忘年会の会場となる店が今日やっとこさ決まって今年の幹事を任されているおじさんとしてもやっとこさ一息ついているところだよ。ところで for_eachでだって、前回値を使ったループ処理が可能だ。これでコンテナを引数にとるアル…

キャストしてくれるだけのファンクタ

C++

ってないのかな、みたいな。あるいは簡単に作れるとか。 std::transformなどに渡すための、各種キャスト演算子の機能をファンクタにしたいと思ったのですが、どうも ptr_fun( static_cast< int > )(); などとやってみてもコンパイラに「ハァ」?と言われてし…

今夜はptr_funメモ

C++

やあみんなfloat値やdouble値の符号を反転する最も評価されるやり方はやっぱり、f=-f なのだろうか?あるいは f*=-1.0 かな?(←まさかね)。32ビットマシンと64ビットマシンが錯綜する昨今、符号ビット直狙いで反転なんて怖いことしたくないしね。どうなん…

関数テンプレートのデフォルトテンプレート引数が待ち遠しい、、

C++

やー、今日も書いたよファンクタちゃんたちをたくさんなー。いや、既存コードをファンクタにまとめ直してるだけなわけだけどさー。しかし何だな、やっててひとつ思うのは、関数テンプレートのデフォルトテンプレート引数というものができないという点が、と…

今日のワンポイント英会話

"HOW TIME FLIES!" 今日はこれ。"How many files?"ではないので気をつけてもらいたい。これは時間てどんだけ飛ぶのかしら?そう、察しのよい人はすぐにわかっただろうか。これはまさに「光陰矢の如し」的な意味に使うものらしい。「もうそんなに経つのか」と…

コンテナを受け取る関数を書くくらいだったら、、

C++

コンテナを受け取る関数を書くくらいだったら、各要素について呼び出せるファンクタとして提供する。 コンテナを受け取る関数を書くくらいだったら、各要素について呼び出せるファンクタとして提供する。 コンテナを受け取る関数を書くくらいだったら、各要…

参照引数受け取りメソッドも対応した自作bind1st(お手軽風)

C++

やあ子供たち、夜はまだまだ蒸し暑いね。夜更かしばっかしてないで早く寝ろよ(お前もな) class Vertex { public: const float& Position( void) const { return _position; } static Vertex* Create( void ){ return new Vertex(); } float _position; }; …

動径ループを手軽に実装できる便利ホストテンプレート

C++

プログラムで円や球を作る場合の、動径ループを書くのは面倒だ。記述すべき内容が陳腐でわかりきっている割には、M_PIの有無で悩んだり、ラジアンに直したり、分割角度を一次変数に用意したりなどうんざりだ。 そこで動径ループをやってくれるための便利テン…

NestCallによる無限階層関数呼び出しファンクタ

C++

先日のNestCallファンクタだが、1階層分だけ用意しておけば実はそれだけでもう、無限階層ネスト呼び出しに対応できることに気付いた。 template< class Fnc1, class Fnc2 > struct NestCall_t: public unary_function < typename Fnc1::argument_type, type…

本日の関数オブジェクトはOpenGLがらみ

今日の発明はこれ。 struct MyGlVertex3fv { void operator()( const Vec3& v ) const { glVertex3fv( v.V() ); } }; 例えばこう使う(↓) vector< Vec3 > vv; for( int i=-10; i<=10; ++i ){ vv.push_back( Vec3( -10, i*.08, 0 ) ); vv.push_back( Vec3( +…

今日考えたもの:NestCall関数アダプタ

C++

なんでもかんでもfor_eachやtransformといった高階関数で記述するのがマイブームな今日この頃、こんなものを考えた。 こんな状況があったとする。 class C{ //クラスC public: void Hi( void){ cout<< "hi!"<

メンバ関数(const版)へのポインタをmem_funに渡す

C++

キャストするしかないのか。。 これも例の、テンプレートのパラメータ引数のその場でのオーバーロードは期待できないと私が思い込んでいるケースの一種なのだろうか。 #include <iostream> #include <algorithm> #include <vector> #include <functional> #include <numeric> using namespace std; class A{ pub</numeric></functional></vector></algorithm></iostream>…

簡易統計解析クラスを作ってみたよ

やあ子供たち。夏ももう終わりだね。今日はおじさんはstd::accumulateや、 tr1::bind の練習のためにVS2008SP1で、簡単な統計情報計算テンプレートを作成してみたよ。要素セットと、各要素の値の計算方法を指定すると、以下の統計情報、 総和、平均値 分散 …

std::accumulateを使う

C++

#include とすれば、std::accumulate() が利用できるのか。これまたなんと便利な。。(涙) これはコンテナの中の値の加算とか、統計をとったりするのに便利だ。っと、第4引数の二項演算子はどう使われるのだ?(以下、sgiのページより) The function objec…