如何将std :: string转换为v8的Local <string>

Loo*_*urr 13 c++ 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";
}
Run Code Online (Sandbox Code Playgroud)

但是我遇到了麻烦,因为我的所有论点都是某种形式的v8模​​板,我无法弄清楚如何在两者之间切换.该文件没有明确说明它要么.

编译器给了我这个错误

../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 );
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Local<v8::String>和之间切换std::string &

Loo*_*urr 33

这似乎运作良好

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

如果你想把a转换std::string成a v8::String那么做

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

  • 更高版本的v8需要稍微不同的方法:```String :: NewFromUtf8(isolate,something.c_str())``` (5认同)