2014-10-16 110 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; 
}