Как преобразовать std:: string в локальный файл v8


У меня есть функция, которая должна взять строку и затем передать ее моей функции c++ add_node()

Handle<Value> Graph::add_node(const v8::Arguments& args)
{
  HandleScope scope;

  Graph* graph = ObjectWrap::Unwrap<Graph>(args.This());
  graph->add_node( args[0]->ToString() );

  std::cout << "In add node n";
}
Однако у меня возникли проблемы, потому что все мои аргументы-это V8 templetes того или иного рода, и я не могу понять, как переключаться между ними. В документации это тоже не ясно сказано.

Компилятор выдает мне эту ошибку

../graph/binding.cc:52:10: error: no matching member function for call to
      'add_node'
  graph->add_node( args[0]->ToString() );
  ~~~~~~~^~~~~~~~
../graph/directed_graph.h:27:7: note: candidate function not viable: no known
      conversion from 'Local<v8::String>' to 'std::string &' (aka
      'basic_string<char> &') for 1st argument;
        void add_node( std::string & currency );

Как я могу переключаться между Local<v8::String> и std::string &?

2 12

2 ответа:

Это, кажется, хорошо работает

v8::String::Utf8Value param1(args[0]->ToString());
std::string from = std::string(*param1);

И если вы пытаетесь преобразовать std::string в v8::String, то сделайте

std::string something("hello world"); 
Handle<Value> something_else = String::New( something.c_str() );

У меня нет этого фреймворка v8 на этой коробке, но это

v8::AsciiValue av(args[0]->ToString());
std::basic_string<char> str(av);
graph->add_node(str);

Должно работать, данный граф - > add_node копирует str.