我有一个函数,它接受一个字符串,然后将它传递给我的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模板,我无法弄清楚如何在两者之间切换。 documentation也没有明确说明。
编译器给我这个错误
../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 &
之间切换?
答案 0 :(得分:31)
这似乎运作良好
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() );
答案 1 :(得分:2)
我在这个盒子上没有那个v8框架,但是这个
v8::AsciiValue av(args[0]->ToString());
std::basic_string<char> str(av);
graph->add_node(str);
应该工作,给定graph-&gt; add_node复制str。
答案 2 :(得分: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();