2013-10-25 24 views
6

Pracuję w Visual Studio 2010, używając kodu C++. Co próbuję zrobić, to zmienić wartość dyrektywy preprocesora w czasie pracy, nie wiem, czy jest to możliwe, ale próbowałem to ..Zmienianie wartości makra w czasie wykonywania

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 


} 

W jaki sposób można zmienić ustawienia POO tak, aby obiekty klasy korzystały z innej implementacji innych metod? A jeśli nie jest to możliwe, jakie jest inne podejście do tego?

+5

Nie można zmienić dyrektyw preprocesora w czasie wykonywania. Używanie klasy bazowej z różnymi klasami pochodnymi może działać, w zależności od twojego problemu (który jest trudny do odróżnienia od tego, co nam pokazałeś). – Yuushi

Odpowiedz

8

Wydaje się, że nie masz pojęcia o naturze dyrektywy "preprocesora". Są one dostępne tylko przed przetwarzaniem kompilatora. Kompilator eliminuje (zamienia/przetwarza) definicje makr podczas etapu kompilacji. Nie istnieją w czasie wykonywania, aby się zmienić. Właściwie jest to mini-język do samego siebie, który kompiluje się tylko do kodu c/C++, który jest następnie przetwarzany przez kompilator.

Wygląda na to, że chcesz, aby twoja klasa była dwiema różnymi rzeczami w oparciu o dane wejściowe runtime. Może to wskazywać na problem projektowy. Możesz rozważyć zdefiniowanie dwóch różnych klas (prawdopodobnie z typową banalną klasą bazową).

Powiązane problemy