我实际上有两个问题。
#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;\
}
最佳答案
1:否。您在检查之前使用ClassPtr1
,如果它实际上为null,则这是未定义的行为。您需要首先获取ClassPtr1
,然后进行检查,然后使用它来获取ClassPtr2
,然后进行检查。
2:是的,原则上还可以宏是否完全是个好主意是另一个问题。