13

我有一个函数可以接收一个字符串,然后将它传递给我的 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 模板,我不知道如何在两者之间切换。文档_也没有明确说明

编译器给了我这个错误

../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 &

4

3 回答 3

31

这似乎运作良好

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

如果您尝试将 a 转换std::string为 av8::String则执行

std::string something("hello world"); 
Handle<Value> something_else = String::New( something.c_str() );
于 2013-05-19T20:18:06.470 回答
2

我在这个盒子上没有那个 v8 框架,但是这个

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

应该可以工作,因为 graph->add_node 复制了 str。

于 2013-05-17T16:39:04.703 回答
0

这适用于 2020 年 3 月(NodeJS v12.16.1):

using v8::Local;
using v8::String;
using v8::NewStringType;

std::string encoded_val = **some_value**;

Local<String> returned_str = String::NewFromUtf8(isolate, encoded_val.c_str(), 
NewStringType::kNormal).ToLocalChecked();
于 2020-03-24T03:37:57.347 回答