Reputation: 5125
I have a function which is ment to take in a string and then pass it to my c++ function 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";
}
However I'm having trouble because all of my arguments are v8 templetes of some sort or another and I cant figure out how to switch between the two. The documentation doesn't state it clearly either.
The compiler is giving me this error
../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 );
How can I switch between Local<v8::String>
and std::string &
?
Upvotes: 13
Views: 14553
Reputation: 13
This works in Mar 2020 (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();
Upvotes: 0
Reputation: 5125
This seems to work well
v8::String::Utf8Value param1(args[0]->ToString());
std::string from = std::string(*param1);
and if you're trying to convert a std::string
to a v8::String
then do
std::string something("hello world");
Handle<Value> something_else = String::New( something.c_str() );
Upvotes: 31
Reputation: 1226
I don't have that v8 framework on this box, but this
v8::AsciiValue av(args[0]->ToString());
std::basic_string<char> str(av);
graph->add_node(str);
should work, given graph->add_node copies the str.
Upvotes: 2