2013-10-25 10 views
6

पर मैक्रो के मान को बदलना मैं सी ++ कोड का उपयोग कर विजुअल स्टूडियो 2010 में काम कर रहा हूं। मुझे क्या करना कोशिश कर रहा हूँ रन टाइम के दौरान एक पूर्वप्रक्रमक निर्देश का मूल्य बदल, यकीन नहीं करता है, तो यह संभव है, लेकिन मैं यह कोशिश की है है ..रन टाइम

somefile.h

static int mValue = 0; 
#define POO = mValue; 
... 

#if POO 0 
//define class methods 
#else 
//define class methods differently 
} 

main.cpp

main() 
{ 

//Code calls constructor and methods allowed when POO is 0 

//Code increments mValue 

//Code calls constructor and methods allowed when POO is 1 


} 

पीओओ कैसे बदला जा सकता है ताकि कक्षा वस्तुओं अन्य तरीकों के एक अलग कार्यान्वयन का उपयोग कर सकें? या यदि यह संभव नहीं है, तो इसका दूसरा दृष्टिकोण क्या है?

+5

आप रनटाइम पर प्रीप्रोसेसर निर्देशों को नहीं बदल सकते हैं। अलग-अलग व्युत्पन्न कक्षाओं के साथ बेस क्लास का उपयोग करना आपकी समस्या के आधार पर काम कर सकता है (जो आपने हमें दिखाया है उससे बताना मुश्किल है)। – Yuushi

उत्तर

8

आप "प्रीप्रोसेसर" निर्देश की प्रकृति के बारे में उलझन में प्रतीत होते हैं। ये केवल कंपाइलर प्रसंस्करण से पहले मौजूद हैं। कंपाइलर संकलन चरण के दौरान मैक्रो परिभाषाओं को हटाता है (प्रतिस्थापित/प्रक्रिया करता है)। वे रनटाइम पर बदलने के लिए मौजूद नहीं हैं। यह वास्तव में एक मिनी-भाषा है जो केवल सी/सी ++ कोड में संकलित होता है, जिसे तब संकलक द्वारा संसाधित किया जाता है।

ऐसा लगता है कि आप चाहते हैं कि आपकी कक्षा किसी प्रकार के रनटाइम इनपुट के आधार पर दो अलग-अलग चीजें हों। यह एक डिजाइन समस्या का संकेत हो सकता है। आप दो अलग-अलग वर्गों (संभवतः एक सामान्य तुच्छ आधार वर्ग के साथ) को परिभाषित करने पर विचार कर सकते हैं।

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