/**************************************************************************
* @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;
}
宏参数中传入指针时的处理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.