मैं एक लिप्यंतरण उपकरण पर काम कर रहा हूं। मेरे पास दो मॉड्यूल लेक्सर और अनुवादक हैं। लेक्सर इनपुट टेक्स्ट से टोकन उत्पन्न करता है। चुने गए वर्तमान भाषा के आधार पर, मुझे उचित अनुवाद दिनचर्या कॉल करना होगा।चर के मूल्य के आधार पर कार्य निष्पादित करना - सी ++
मैं ऐसा करने के लिए कुछ विचारों के साथ आया हूं। सबसे पहले बेस श्रेणी बनाने के लिए base_translator
कहा जाता है और वर्चुअल विधि (translate()
) प्रदान करता है जो प्रत्येक अनुवादकों को ओवरराइड करना पड़ता है। अब एक कारखाना translator_factory
बनाएं और भाषा नाम के साथ create()
पर कॉल करें। यह कारखाना उपयुक्त उदाहरण वापस करेगा।
लेकिन यह इंजीनियरिंग से अधिक प्रतीत होता है। तो मैं एक और दृष्टिकोण के साथ आया जहां मेरे पास निम्नलिखित की तरह एक संरचना है।
struct translator
{
const char* name;
void (*fp)();
};
जो सिर्फ एक भाषा का नाम और एक फ़ंक्शन पॉइंटर रखता है जो इसे संसाधित कर सकता है। उपयोग होगा,
static translator translators[] = {
{"first", first},
{"second", second}
};
const char* language = /* */;
for(int i = 0; i < 2; i++) {
translator *t = translators + i;
if(strcmp(t->name, language) == 0) {
t->fp();
break;
}
}
यह दृष्टिकोण बनाए रखना बहुत आसान और आसान है। लेकिन मुझे आश्चर्य है, क्या यह समस्या का सबसे अच्छा तरीका है? क्या आपको यह बेहतर बनाने के लिए कोई सुझाव है?
कोई भी मदद महान होगी।
आपका दूसरा दृष्टिकोण केवल सी शैली में सी ++ 'रनटाइम पॉलीमोर्फिज्म (वर्चुअल फ़ंक्शंस) को अनुकरण करता है। सी ++ में ओओपी के अंतर्निहित समर्थन पर इसका कोई लाभ नहीं है। –