预处理器宏

时间:2014-10-16 10:19:59

标签: c++ macros c-preprocessor

我正面临以下问题。我们假设我的代码看起来像那样

#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();

1 个答案:

答案 0 :(得分: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;
}