2

想不通这个是怎么回事。这是我正在尝试做的一个例子。

class WhatThe
{
 public:
  WhatThe(std::string Type, int channel) {}
  ~WhatThe() {}

  void Doitnow() {}
};

#define DO_SOMETHING_TEST1 WhatThe("TEST1", channel)
#define DO_SOMETHING_TEST2 WhatThe("TEST2", channel)

#define DO_IT(type, channel) \
        DO_SOMETHING_##type.Doitnow()

然后打电话

DO_IT(TEST1,1);

我收到一个 -- 错误:“通道”未在此范围内声明

我什至可以做的是,你能在宏中包含宏并通过它们传递参数吗?我本来以为

DO_SOMETHING_##type.Doitnow() 

最终会扩大到

WhatThe("TEST1", 1).DoitNow()
4

2 回答 2

2
#define DO_SOMETHING_TEST1(channel) WhatThe("TEST1", channel)
#define DO_SOMETHING_TEST2(channel) WhatThe("TEST2", channel)

#define DO_IT(type, channel) \
        DO_SOMETHING_##type(channel).Doitnow()
于 2013-04-04T06:47:33.687 回答
-1
#define TEST "TEST1"
#define CHANNEL 1

WhatThe(TEST, CHANNEL).DoitNow()

每当您想要执行不同的 TEST 或 CHANNEL 时,这与您提出的解决方案具有相同数量的代码更改。要进行不同的测试,只需更改定义。

要组合参数,请执行以下操作:

#ifdef TEST1_CHANNEL1
    #define TEST "TEST1"
    #define CHANNEL 1
#endif

#ifdef TEST1_CHANNEL2
    #define TEST "TEST1"
    #define CHANNEL 2
#endif

...
于 2013-04-04T06:53:57.273 回答