2013-05-17 9 views
11

मैं एक समारोह जो एक स्ट्रिंग में लेने के लिए और फिर इसे मेरी सी को पारित करने के ++ समारोह add_node()कैसे v8 के स्थानीय करने के लिए std :: स्ट्रिंग परिवर्तित करने के लिए <string>

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"; 
} 

हालांकि मैं सभी क्योंकि समस्या हो रही है जाहिर है है मेरे तर्कों में से कुछ प्रकार के वी 8 मंदिर हैं या मैं समझ नहीं पा रहा हूं कि दोनों के बीच कैसे स्विच करें। 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 & के बीच कैसे स्विच कर सकते हैं दे रहा है?

उत्तर

28

यह अच्छी तरह से काम करने के लिए

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

लगता है और अपने बस कन्वर्ट करने के लिए एक एक v8::String को std::string तो

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

v8 के बाद के संस्करणों को थोड़ा अलग दृष्टिकोण की आवश्यकता है: '' 'स्ट्रिंग :: न्यूफ्रॉमयूटीएफ 8 (पृथक, कुछ.c_str())' '' – Richard

1

मैं इस बॉक्स पर कि v8 ढांचे की जरूरत नहीं है, लेकिन इस

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

काम करना चाहिए, यह देखते हुए graph-> add_node प्रतियां str।

+0

'' AsciiValue' v8' नाम स्थान में अब और नहीं है, लेकिन में की कोशिश कर रहा है, तो 'v8 :: स्ट्रिंग :: AsciiValue'। –

संबंधित मुद्दे