我有这样一个简单的宏,它有两个参数:
#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环境上进行编译