0
std::めるぽん @melponn
そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実装するんだって話だし。
普通のC++使い、銀天すばる @SubaruG
めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実装するんだって話だし。
相沢陽菜 @fetus_hina
ガラッ RT @SubaruG: めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだけど気のせいだった。まあそんなのどうやって実
std::めるぽん @melponn
ピシャッ RT @fetus_hina: ガラッ RT @SubaruG: めるぽん先生が魔法のライブラリを作ると聞いて!(ガラッ RT @melponn: そういえばどんな関数オブジェクトもただの関数ポインタに変換してしまうような魔法のライブラリがあったような気がしたんだ
std::めるぽん @melponn
@DecimalBloat おお、それだ!Boost.Vault にあるんですね。通りで公式探しても見つからないわけだ・・・。
std::めるぽん @melponn
どうやって実装してるのかwktkしながら開いてみるなど。
でちまるさん(実際かわいい) @decimalbloat
型Fの関数オブジェクトを引数にとり、それをstatic F sに保存。関数内ローカル型を宣言、その中で定義したstatic関数f(これが戻り値)がsへとフォワードする、とかそういう感じではないですかね?
でちまるさん(実際かわいい) @decimalbloat
以上がmake_c_function(だっけ?)の内容で、make_c_functionが関数オブジェクトごとにユニークになるようにするため、テンプレート引数に一意になるように整数を指定する。
でちまるさん(実際かわいい) @decimalbloat
と全て予想である。ちなみにユニークな整数の生成は__LINE__とBOOST_PP_COUNTERを組み合わせればだいたいは突破できます。Boost.Typeofと同じです。
std::めるぽん @melponn
@DecimalBloat ぽいですね。static な領域と unique な値を組み合わせるなかなかいい感じにできるものなんですね-。
std::めるぽん @melponn
@nagoya313 ということで c_function 使えばいけるかもですよと。> http://d.hatena.ne.jp/nagoya313/20100506/1273151081
std::めるぽん @melponn
しかし変換する毎に static な領域を使っていくのは心苦しいものがある・・・ポインタだけで実装できるような GC があれば毎回動的に確保しても適当にメモリ回収できそうなのになぁ。
std::めるぽん @melponn
まあそんなこと考える前に仕事しろと。
でちまるさん(実際かわいい) @decimalbloat
@melponn 第一に、callbackとしての役目を終えた時点でプログラマが破棄を指示できるような仕組みが必要。次に、その破棄するタイミングはプログラマが指示するんじゃなくて、なんかの文脈の中に隠してしまって自動的にしたい
std::めるぽん @melponn
@DecimalBloat 動的に作ったサンクのポインタを渡すようにして、そのポインタを誰も保持しなくなった時点で回収しちゃうとか。
std::めるぽん @melponn
まあどうせ大抵の関数ポインタのインターフェースは void* を渡せるようになってるんだから気にしなくていっか。
std::めるぽん @melponn
@DecimalBloat おお、これすごいですね・・・ってよく見たら光成さんだった・・・
ログインして広告を非表示にする
ログインして広告を非表示にする