के लिए प्रकार निर्धारित करता है, मुझे आश्चर्य है कि टाइप को C++ में रनटाइम जानकारी के रूप में निर्धारित किया जा सकता है या नहीं।रनटाइम सी ++
(1) हालांकि मेरे सवाल का काफी सामान्य है, सादगी के लिए, मैं एक साधारण उदाहरण से शुरू कर देंगे:
(क) "argv:
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
}
cout << t << endl; // error: ‘t’ was not declared in this scope
return 0;
}
इस उदाहरण के लिए, वहाँ दो सवाल कर रहे हैं [1] से टी "गलत है, लेकिन सी स्ट्रिंग argv [1] में टाइप जानकारी वास्तविक प्रकार के कीवर्ड में परिवर्तित हो सकती है? इसलिए हमें हर प्रकार की जांच करने की आवश्यकता नहीं है-और खंड और strcmp।
(बी) यदि खंड अभी भी वैध है तो स्थानीय दायरे के अंदर परिभाषित चर टी को कैसे बनाया जाए। यानी एक स्थानीय चर को अपने दायरे के बाहर "निर्यात" कैसे करें?
(2) आम तौर पर ऊपर दिए गए सरल उदाहरण के लिए विशिष्ट नहीं, रनटाइम प्रकारों को निर्धारित करने के सामान्य तरीके क्या हैं? ऐसा लगता है कि कुछ तरीके हो सकते हैं:
(ए) कोई भी अपनी परिभाषा के उसी दायरे के अंदर टाइप किए गए चर के प्रोसेसिंग को प्रोसेस कर सकता है। जैसे
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
cout << t << endl;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
cout << t << endl;
}
return 0;
}
और संभावित रूप से विभिन्न प्रकार के पुन: प्रयोज्य के लिए सामान्य कोड बनाने के लिए टेम्पलेट फ़ंक्शन का उपयोग करें।
(बी) या कोई अप्रत्यक्ष रूप से परिभाषा को निर्यात करने के लिए अमूर्त वर्ग प्रकार और बहुरूपता का उपयोग कर सकता है, लेकिन मुझे यकीन नहीं है कि वास्तव में कैसे।
आपकी सलाह के लिए धन्यवाद!
+1 मैं पॉलिमॉर्फिक समाधान पोस्ट करने जा रहा था। Boost.variant की तुलना में अधिक समझ में आता है क्योंकि boost.variant के साथ आपको प्रत्येक ऑपरेशन के लिए प्रकार की जांच करने की आवश्यकता होगी। –