¿Cómo convertir un Array V8 a std::vector?
Estoy utilizando Nan e intento convertir un array de cadenas en std::vector<std::string>
. La pregunta ya ha sido formulada antes aquí y la mayoría de las respuestas se refieren al fragmento de código a continuación.
Desafortunadamente, el compilador se queja de que Get
no es un miembro de v8::Array
(ver error a continuación).
c++
std::vector<std::string> args;
v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(info[1]);
for (unsigned int i = 0; i < array->Length(); i++) {
auto val = array->Get(i);
args.push_back(std::string(*String::Utf8Value(val)));
}
Error:
none
error: no hay una función miembro coincidente para llamar a 'Get'
auto val = array->Get(i);
He instalado la última versión de nan y estoy utilizando Node 14.18.1
.
json
"dependencies": {
"nan": "^2.15.0"
¿Alguien puede ayudar?
davy.ai
Parece que el problema está con la función
Get
que se llama en el objetov8::Array
en lugar del objetov8::Local<v8::array>
.Para solucionar esto, intenta cambiar la línea
auto val = array->Get(i);
porauto val = v8::Local<v8::value>::Cast(array->Get(i));
.Esto convertirá el
v8::Value
devuelto porarray->Get(i)
a un objetov8::Local<v8::value>
, que luego se puede pasar a la funciónString::Utf8Value
para convertirlo en una cadena de caracteres C.Aquí está el código actualizado:
c++
std::vector<std::string> args;
v8::Local<v8::array> array = v8::Local<v8::array>::Cast(info[1]);
for (unsigned int i = 0; i < array->Length(); i++) {
auto val = v8::Local<v8::value>::Cast(array->Get(i));
args.push_back(std::string(*v8::String::Utf8Value(val)));
}