Я решил попробовать создать простую оболочку C для API V8, используя модель, описанную в Разработка API оболочки C для объектно-ориентированного кода C ++ . К сожалению, я не слишком знаком с C ++, поэтому у меня возникла проблема с унаследованными конструкторами.
v8capi.h
typedef struct V8Context V8Context;
#ifdef __cplusplus
extern "C" {
#endif
V8Context *V8_NewContext();
#ifdef __cplusplus
}
#endif
v8capi.cpp
#include <v8.h>
struct V8Context : public v8::Handle<v8::Context> { };
V8Context *V8_NewContext() {
v8::HandleScope hscope;
return new V8Context(v8::Context::New());
}
Из того, что я понимаю, new V8Context(...)
должен вызывать конструктор v8::Handle<T>
, который принимает Handle<T>
. v8::Context::New()
возвращает v8::Persistent<T>
, который наследует v8::Handle<T>
, поэтому должен работать. Но на самом деле он пытается вызвать конструктор, который принимает const V8Context &
:
error C2664: 'V8Context::V8Context' : cannot convert parameter 1 from
'v8::Persistent<T>' to 'const V8Context &'
with
[
T=v8::Context
]
No user-defined-conversion operator available that can perform this
conversion, or the operator cannot be called
Что я делаю не так?