状況は次のとおりです。オブジェクト+プロトタイプで定義したすべての関数に対して単一のduktape/C関数を使用したいと思います。そのためには、関数名とコールバック(実際にはstd::function
)を取り、簡単に一般的な処理を行い、コールバックを簡単にすることができる関数マップを用意しています(インプレースラムダを使用することもできます)。duktape用の中央機能ディスパッチャーを書くには?
これは既にうまく機能しています。一つの問題:異なるオブジェクト上に同じ名前の関数があります。曖昧さを解消するために、オブジェクトのヒープポインタ(またはオブジェクトでもあるプロトタイプ)をさらに修飾子として使用します。したがって、私の中心的なduktape/C関数が呼び出されるとき、関数がグローバルかどうかを最初に調べます(つまり、グローバルオブジェクトで定義されています)。それが失敗した場合、私はthis
バインディングを取得し、そのヒープポインタで検索します。それも失敗した場合は、プロトタイプチェーンを歩き、プロトタイプの1つで関数を見つけることができるかどうかを確認します。
これはthis
バインディング(または間違ったもの、Function.prototype.apply()
のようなもの)がない場合を除いて、99%までうまく機能します。
質問:私の中心的なduktape/Cコールバックの関数の元のプロトタイプはどうすれば入手できますか?