そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実装するんだって話だし。
2010-05-08 02:19:28めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実装するんだって話だし。
2010-05-08 02:20:18ガラッ RT @SubaruG: めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実
2010-05-08 02:20:57ピシャッ RT @fetus_hina: ガラッ RT @SubaruG: めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだ
2010-05-08 02:21:44型Fの関数オブジェクトを引数にとり、それをstatic F sに保存。関数内ローカル型を宣言、その中で定義したstatic関数f(これが戻り値)がsへとフォワードする、とかそういう感じではないですかね?
2010-05-08 02:27:46以上がmake_c_function(だっけ?)の内容で、make_c_functionが関数オブジェクトごとにユニークになるようにするため、テンプレート引数に一意になるように整数を指定する。
2010-05-08 02:29:46と全て予想である。ちなみにユニークな整数の生成は__LINE__とBOOST_PP_COUNTERを組み合わせればだいたいは突破できます。Boost.Typeofと同じです。
2010-05-08 02:31:05@DecimalBloat ぽいですね。static な領域と unique な値を組み合わせるなかなかいい感じにできるものなんですね-。
2010-05-08 02:32:18@nagoya313 ということで c_function 使えばいけるかもですよと。> http://d.hatena.ne.jp/nagoya313/20100506/1273151081
2010-05-08 02:34:30しかし変換する毎に static な領域を使っていくのは心苦しいものがある・・・ポインタだけで実装できるような GC があれば毎回動的に確保しても適当にメモリ回収できそうなのになぁ。
2010-05-08 02:41:19@melponn 第一に、callbackとしての役目を終えた時点でプログラマが破棄を指示できるような仕組みが必要。次に、その破棄するタイミングはプログラマが指示するんじゃなくて、なんかの文脈の中に隠してしまって自動的にしたい
2010-05-08 02:47:37@DecimalBloat 動的に作ったサンクのポインタを渡すようにして、そのポインタを誰も保持しなくなった時点で回収しちゃうとか。
2010-05-08 02:52:56