无法弄清楚这个是怎么回事。这是我正在尝试做的一个例子。
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);
我得到了一个错误:'channel'未在此范围内声明
我甚至可以做什么,你能在宏中有宏并通过它们传递一个参数吗?我原以为是
DO_SOMETHING_##type.Doitnow()
最终会扩展到
WhatThe("TEST1", 1).DoitNow()
答案 0 :(得分: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()
答案 1 :(得分:-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
...