【发布时间】:2014-03-12 13:54:40
【问题描述】:
其实我有两个问题。
这是“ if (ClassPtr1) && (ClassPtr2) ”检查它们是否不为空的正确方法吗?
-
我想知道是否可以将 if else 语句完全包含在多行宏中。我附上了示例代码。
#define MACRO_NAME(object,expression){\ Class1* ClassPtr1 = dynamic_cast<Class1*>(object);\ Class2* ClassPtr2 = ClassPtr1->SomeMethod();\ if (ClassPtr1) && (ClassPtr2)\ {\ try\ {\ //some code }\ catch(...)\ {\ //some code }\ }\ else\ return expression;\ }
【问题讨论】:
-
您缺少一些括号。除此之外,你测试过吗?尝试生成预处理代码,看看。
-
另请注意,必须使用
dynamic_cast可能是糟糕设计的标志。把SomeMethod设为虚拟就不能解决吗? -
顺便说一句,当有多个语句并且需要宏中的块时,通常的模式是在
do { ... } while (false)块内(没有结束分号)。
标签: c++ if-statement macros