में मान हैंडल के लिए कास्ट बनाम ToXXX मैं एक C++ प्रोग्राम में सहायक भाषा के रूप में V8 एम्बेड कर रहा हूं।v8
मैं वी 8 से एक Handle<Value>
पुनः प्राप्त जब मैं value_handle->IsString()
साथ मैं तो पता लगा सकते हैं यह है कि (माना) की तरह
Handle<Value> value_handle = context->Global()->Get(key_handle);
कुछ फोन एक स्ट्रिंग। और यदि ऐसा है तो मैं इसे अपनी स्ट्रिंग-विशिष्ट विधियों तक पहुंचने के लिए Handle<String>
में परिवर्तित कर सकता हूं।
लेकिन वहाँ है कि करने के दो तरीके हो रहा है, या तो:
Handle<String> string = value_handle->ToString();
या
Handle<String> string = Handle<String>::Cast(value_handle);
हालांकि, अरै, और फ़ंक्शन के लिए, कोई toArray()
या toFunction
तरीकों, बस कास्टिंग ।
तो मेरा प्रश्न है: ए) ToXXX
कास्टिंग के लिए सिंटैक्टिक चीनी है? और, यदि नहीं बी) ToXXX
विधि क्या कर रही है?
हम्म। क्या आप वाकई हुड के नीचे वास्तव में क्या होता है? मेरे पास कुछ अजीब व्यवहार है जहां * कभी-कभी * 'हैंडल' पर 'टूल्स टूस्ट्रिंग() को कॉल करना एक SEGFAULT में परिणाम होता है यदि 'Value' स्ट्रिंग नहीं है। अन्य बार, यह वही करेगा जो आप वर्णन करते हैं। –
namuol
@namuol हाँ मुझे यकीन है। SEGFAULT आपके कोड में एक बग से V8 कोड में एक बग से लेकर कई कारणों से हो सकता है। सवाल करना मुश्किल है कि प्रश्न में कोड को देखे बिना। –
यह पता चला है कि 'ToString' को वास्तव में एक संदर्भ के भीतर काम करने की आवश्यकता है - मैं इसे लगातार संभाल पर एक संदर्भ स्थापित किए बिना बुला रहा था। मैंने अलग-अलग स्टोर को हल करके हल किया था, जिसे हैंडल को मूल्य के साथ बनाया गया था और 'ToString' को कॉल करने से पहले पृथक से एक संदर्भ बनाया था। – namuol