如何识别额外的宏观论点?

时间:2016-05-31 07:09:30

标签: c++ macros

我有这样一个简单的宏,它有两个参数:

#define DO_SOMETHING(__X__ , __Y__) \
do{ \
    __X__;\
    __Y__;\
} while (0);

除了控制台输出之外,还有三个我如何使用此宏的示例:

DO_SOMETHING(cout << "Part 1";); //=> Part1 //NoErr
DO_SOMETHING(cout << "Part 1"; , cout << "Part 2";); //=> Part1 Part2
DO_SOMETHING(cout << "Part 1";, cout << "Part 2";, cout << "Part3";); //=> Part1 Part2 //NoErr

我认为这是由于逗号,在宏中解释的方式。

问题但是,我希望看到案例1和3的编译时错误。我该如何实现?

PS:我不能使用function,因为我需要上下文!例如,第一个参数可以是return;语句。

编辑:真正的宏并不那么容易。实际上,我们在整个项目中都有一个重复的开关案例,我们希望有一个机制来检查我们是否处理了所有交换机中的案例。我们可以通过(1)多态性(2)函数调用来实现。解决方案(1)不适用,因为我们将拥有一个非常庞大的类,几乎没有内聚代码,因为我们需要上下文,所以解决方案(2)是不可能的。

PS:我们需要在 Visual Studio GCC 以及 xCode环境上进行编译

0 个答案:

没有答案