宏参数中传入指针时的处理

来源:互联网 发布:潮流男装品牌 知乎 编辑:程序博客网 时间: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;}

原创粉丝点击