v8::Context
クラスに aと av8::External
をメンバーとして保持したい。したがって、永続ハンドルを使用する必要があると考えました。
class ScriptHelper {
public:
ScriptHelper(v8::Persistent<v8::Context> Context) : context(Context) {
// ...
}
// ...
private:
v8::Persistent<v8::Context> context;
v8::Persistent<v8::External> external;
};
ただし、永続ハンドルは V8 ではコピーできないため、コードはコンパイルされません。エラーは、2 つのメンバーが初期化される行で発生します。コンテキストの場合、これはコンストラクターの初期化子リストにあります。外部の場合、これはコンストラクター本体の内部にあります。
1> エラー C2440: '=' : 'v8::Primitive *' から 'v8::Object *volatile ' に変換できません
1> 指す型は無関係です。
変換には、 reinterpret_cast 、C スタイルのキャスト、または関数スタイルのキャストが必要です
永続的なハンドルへのポインターを使用することを考えましたが、ハンドルの概念は既に何らかの参照を意味しているため、直観に反するように思えます。さらに、V8の内部ガベージコレクターがオブジェクトをクリーンアップできるように、ハンドルが破棄されると思います。
V8 オブジェクトをクラス メンバーとして永続的に保存するにはどうすればよいですか?
更新: 永続ハンドルへのポインターを使用しても、永続ハンドルを返すメソッドに対して同じコンパイラ エラーが発生します。