当嵌入Python时,有PyCapsule
类型来创建一个包含C指针的对象,该指针不能从Python代码中修改,即它非常适合传递仅由C代码使用的东西。
由于我的应用程序还通过SpiderMonkey引擎支持JavaScript,我在SpiderMonkey中寻找类似的东西。我知道我可以使用JSClass
标志创建自定义JSCLASS_HAS_PRIVATE
,但我想知道是否有另一种更简单/更轻量级的方法。
答案 0 :(得分:1)
没有类似的东西,所以确实需要创建一个自定义类。这是我最终使用的代码;它定义了一个新类“Resource”来存储指针。虽然不如python方式那么漂亮,但它仍然非常简单:
// Define the class and give it some private space for the pointer
static JSClass resource_class = { "Resource", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub,
JS_PropertyStub, JS_StrictPropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub,
JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS };
// Create an object and store the pointer
JSObject *obj = JS_NewObject(cx, &resource_class, NULL, NULL);
JS_SetPrivate(cx, obj, MY_POINTER);
// Get the pointer
void *ptr = JS_GetPrivate(cx, obj);