es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con la función Get que se llama en el objeto v8::Array en lugar del objeto v8::Local<v8::array>.

    Para solucionar esto, intenta cambiar la línea auto val = array->Get(i); por auto val = v8::Local<v8::value>::Cast(array->Get(i));.

    Esto convertirá el v8::Value devuelto por array->Get(i) a un objeto v8::Local<v8::value>, que luego se puede pasar a la función String::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)));
    }

Comments are closed.