2013-10-25 88 views
6

我正在使用C++代碼在Visual Studio 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 


} 

POO如何更改以便類對象使用其他方法的不同實現?或者如果這是不可能的,另一種方法是什麼?

+5

您不能在運行時更改預處理器指令。使用具有不同派生類的基類可能會有效,這取決於您的問題(根據您向我們展示的內容很難分辨)。 – Yuushi

回答

8

您似乎對「預處理器」指令的性質感到困惑。這些只在編譯器處理之前存在。編譯器在編譯步驟中消除(替換/處理)宏定義。它們在運行時不存在以改變。它本身就是一種迷你語言,只能編譯爲c/C++代碼,然後由編譯器處理。

這聽起來像你希望你的類是基於某種運行時輸入的兩種不同的東西。這可能表明設計問題。你可能會考慮定義兩個不同的類(可能有一個普通的基類)。