宏参数中传入指针时的处理
来源:互联网 发布:潮流男装品牌 知乎 编辑:程序博客网 时间:2024/06/01 07:32
/************************************************************************** * @Copyright (c) 2013, ChenMH, All rights reserved. * @file : main.cpp * @version : ver 1.0 * @author : ChenMH * @date : 2013/07/01 17:07 * @brief : 宏参数中传入指针时的处理**************************************************************************/#include <cstdio>#include <string>class CTest{public: std::string& GetName() { static std::string test; test.append("test"); return test; }};//将可能会含有运算符的参数加括号,以防止宏的展开方式和自已想的不同。//如msg未加括号,而传入的msg为*pT时,将会出现展开错误的问题。#define MACRO_POINTER(msg, msgoutput) \{ \ msgoutput = (msg).GetName(); \}int main(){ CTest* pT = new CTest; std::string strMsg1, strMsg2; MACRO_POINTER(*pT, strMsg1); //更稳妥的做法是,给*pT加上括号,方止宏里面出现未加括号的情况。如下: MACRO_POINTER((*pT), strMsg2); delete pT; pT = NULL; return 0;}