2014-10-16 274 views
-1

我正面臨以下問題。讓我們假設我的代碼看起來像預處理器宏

#define Function1 FunctionOne 
#define Function2 FunctionTwo 
#define CALL_FUNCTION (FunctionName) \ 
     SOMEOBJ someObject.... 
     someObject->FunctionName(); 

現在的問題是,我想查一下函數名,並取決於我要使用不同的SOMEOBJ。所以對於

CALL_FUNCTION(Function1) 

下面的代碼的通話將被稱爲

SOMEOBJ someObj... 
    someObj->FunctionOne(); 

CALL_FUNCTION(Function2) 
    .... 
    SOMEOBJ2 someObj... 
    someObj->FunctionOne(); 
+5

這在我看來,宏並不是這個工作的工具。 – 2014-10-16 10:21:42

+0

如果我見過一個[X-Y問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你真正想做什麼,你試圖通過這些宏實現的事情? – Angew 2014-10-16 10:30:02

+0

我敢打賭,這是不可能的! – 9dan 2014-10-16 10:30:08

回答

0

首先我想從使用我的回答你泄氣的。就像評論說的那樣,你可能正在爲你的問題拍攝錯誤的解決方案。

作爲宗旨,爲學習我想給大家提供一個宏觀的解決方案:

struct SOMEOBJ1 { 
    void FunctionOne() { std::cout << "SOMEOBJ1 FunctionOne"; } 
}; 

struct SOMEOBJ2 { 
    void FunctionTwo() { std::cout << "SOMEOBJ2 FunctionTWO"; } 
}; 

#define Function1 FunctionOne 
#define Function2 FunctionTwo 
#define CALL_FUNCTION(funcVersion) \ 
{ \ 
    SOMEOBJ ## funcVersion someobj; \ 
    someobj.Function ## funcVersion(); \ 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    CALL_FUNCTION(1); 
    CALL_FUNCTION(2); 

    return 0; 
}