2012-06-18 1 views
5

में पैरामीटर के साथ std :: स्ट्रिंग को मौजूदा फ़ंक्शन में कनवर्ट करें मेरे पास मेरे प्रोजेक्ट में एक कार्यान्वित फ़ंक्शन MyFunc(int, double, string) है। मैं कैसे उदाहरण के लिए उदाहरणसी ++

std::string str = "MyFunc(2, 3.12, \"Lemon Juice\")"; 

और क्या मानक कार्यों के बारे में के लिए आवश्यक मानकों को अपने स्ट्रिंग प्रतिनिधित्व होने के साथ इस समारोह कॉल कर सकते हैं,,, मैं कैसे time()std::string "time()" होने कॉल कर सकते हैं?


ठीक है, यहां अधिक विस्तृत कार्य है। मुझे map <string, Data> Data कई बच्चों के साथ एक क्लास-रैपर है। जब मैं Data.GetValue() विधि को कॉल करता हूं, तो यह बाल कक्षा के आंतरिक डेटा के आधार पर std::string देता है। Data बच्चों में से एक को int की स्ट्रिंग प्रस्तुति वापस करनी होगी, दूसरा - double का स्ट्रिंग प्रस्तुति, और अंतिम - वर्तमान दिनांक और समय का स्ट्रिंग प्रस्तुति। यहां समस्या है - मुझे नहीं पता कि मानक फ़ंक्शन ctime() को Data बच्चों में से किसी एक से जानकारी प्राप्त करने के लिए कैसे कॉल करें।

+0

नहीं आसानी से। क्या आप * किसी भी * फ़ंक्शन, या केवल कुछ विशिष्ट कॉल करने में सक्षम होना चाहते हैं? – BoBTFish

+1

स्क्रिप्टिंग भाषा के लिए मुख्य अनुप्रयोग है। कई स्क्रिप्टिंग भाषाएं सी ++ के साथ काफी ठीक से एकीकृत होती हैं, उदाहरण के लिए LUA पर एक नज़र डालें। – smerlin

+1

आपको इसके लिए क्या चाहिए? जैसा कि अन्य ने टिप्पणी की है, यह बहुत मुश्किल है। आपको जो चाहिए वह शायद आसान विकल्प हैं। –

उत्तर

3

आप सामान्य में C++ में कोड निष्पादित नहीं कर सकते जिसका स्रोत स्ट्रिंग में निहित है। इसके लिए शायद सबसे अधिक आकर्षक प्रेरणा यह है कि कोड पर चलने वाली मशीन पर सी ++ कंपाइलर होने के लिए सी ++ कार्यान्वयन की आवश्यकता नहीं होती है, हालांकि इसके अलावा इसके लिए और भी कुछ है।

आप विशिष्ट मामलों के लिए ऐसा करने में सक्षम हो सकते हैं। यही कारण है कि हो सकता है:

मंच विशेष, उदाहरण के लिए:

  • लपेटें कुछ बॉयलरप्लेट में स्रोत है, तो या तो इसके खिलाफ संकलक बाह्य लिंक कहते हैं, या अपने कार्यक्रम में एम्बेड। यह आपको एक कार्यक्रम या पुस्तकालय देता है।
  • उस नए प्रोग्राम को बाहरी रूप से चलाएं, या उस पुस्तकालय के विरुद्ध गतिशील रूप से लिंक करें।

इनपुट विशेष, उदाहरण के लिए:

  • आप एक समारोह कॉल एक विशेष ज्ञात कार्य करने के लिए, तर्कों के रूप शाब्दिक साथ, अपेक्षाकृत आसानी से एक पूर्ण C++ कम्पाइलर की जरूरत के बिना पार्स सकता है। चर मानों में तर्क मान प्राप्त करें और फ़ंक्शन को कॉल करें। लेकिन यदि आप ऐसा करने जा रहे हैं, तो आप स्ट्रिंग के लिए एक अधिक आसानी से पारदर्शी प्रारूप निर्दिष्ट कर सकते हैं, जो कि C++ फ़ंक्शन कॉल की तरह दिखता है।

ऐसा लगता है जैसे कि अपने कार्य में आप एक स्ट्रिंग है में से एक है है:

  • एक int
  • का प्रतिनिधित्व एक double
  • एक तिथि का प्रतिनिधित्व का प्रतिनिधित्व और पहर।

आप कहते हैं कि क्या आप इस स्ट्रिंग के साथ क्या करना चाहते हैं, लेकिन जो कुछ भी है कि आप शायद पता लगाने के लिए जो यह है तीन में से (क) स्ट्रिंग की जांच की जरूरत है, और उसके बाद (ख) कर उस प्रारूप के लिए उपयुक्त कुछ।बेहतर है, तो आप व्युत्पन्न वर्ग कोई फर्क नहीं पड़ता जिनमें से तीन GetValue() रिटर्न ही प्रतिनिधित्व लौटने की जिम्मेदारी दे सकता है। उदाहरण के लिए, यदि आप वास्तव में क्या चाहते हैं 1970 के बाद से सेकंड, एक GetSecondsSinceEpoc समारोह जोड़ सकते हैं और प्रत्येक वर्ग में अलग ढंग से इसे लागू।

0

आप सी ++ का उपयोग करके ऐसा नहीं कर सकते हैं।

+2

जबकि कम या ज्यादा (वहाँ * हैं * सी ++ पटकथा पुस्तकालयों) सही, यह वास्तव में उपयोगी नहीं है ... –

+4

पाठ्यक्रम वह ऐसा कर सकते हैं में से, वह सिर्फ एक पार्सर कि कॉल में उन तार तब्दील लिखने के लिए की जरूरत है। हमारे पास मेरी कंपनी में एक लाइब्रेरी है जो सैकड़ों, शायद हजारों लाइब्रेरी फ़ंक्शंस के लिए करती है। – PlasmaHH

+0

कोई भी खुला स्रोत जो मैं अपने घर में उपयोग कर सकता हूं? या स्थानीय परियोजनाओं? – elcuco

1

दूसरों के द्वारा उल्लेख किया है, सी ++ अपने आप में ऐसा करने में सक्षम नहीं है। हालांकि बाहरी ढांचे आपकी मदद कर सकते हैं।

ROOT (CERN में प्रयोग किया जाता) ++ एक दुभाषिया के साथ सी के लिए प्रतिबिंब प्रदान करता है। आप अपने कोड के भीतर से एक विधि कॉल या सी ++ में लिखे गए मैक्रो को निष्पादित/व्याख्या करने में सक्षम होंगे।

+0

कंप्यूटर सुरक्षा टीम द्वारा प्राप्त सुरक्षा मुद्दों के कारण रूट वेबसाइट नीचे है, यह जल्द ही वापस आना चाहिए ... – Barth