2013-10-25 22 views
6

Sto lavorando in Visual Studio 2010, utilizzando codice C++. Quello che sto cercando di fare è cambiare il valore di una direttiva del preprocessore in fase di esecuzione, non so se è possibile, ma ho provato questo ..Modifica del valore di una macro in fase di esecuzione

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 


} 

Come si può modificare POO in modo che gli oggetti di classe utilizzino un'implementazione diversa di altri metodi? O se non è possibile, qual è un altro approccio a questo?

+5

Non è possibile modificare le direttive del preprocessore in fase di esecuzione. L'uso di una classe base con classi derivate diverse può funzionare, a seconda del problema (cosa difficile da dire da ciò che ci hai mostrato). – Yuushi

risposta

8

Sembra che tu sia confuso sulla natura della direttiva "preprocessore". Questi esistono solo prima dell'elaborazione del compilatore. Il compilatore elimina (sostituisce/elabora) le definizioni di macro durante la fase di compilazione. Non esistono al runtime per cambiare. In realtà è un mini-linguaggio per sé che compila solo in codice c/C++, che viene poi elaborato dal compilatore.

Sembra che tu voglia che la tua classe sia composta da due cose diverse basate su una sorta di input di runtime. Questo potrebbe indicare un problema di progettazione. Potresti prendere in considerazione la definizione di due classi diverse (possibilmente con una classe base banale comune).

Problemi correlati