【发布时间】:2011-04-15 12:59:09
【问题描述】:
我的代码中有几个不同的结构,我想打印到控制台。
三个例子(几百个):
typedef struct ReqCntrlT /* Request control record */
{
int connectionID;
int dbApplID;
char appDescr[MAX_APPDSCR];
int reqID;
int resubmitFlag;
unsigned int resubmitNo;
char VCIver[MAX_VCIVER];
int loginID;
} ReqCntrlT;
//---------------------------------------------
typedef struct /* Connection request data block */
{
char userID[MAX_USRID];
char password[MAX_PWDID];
} CnctReqDataT;
//---------------------------------------------
typedef struct {
char userID[LOGIN_MAX_USERID];
char closure;
int applVersion;
int authorizationDataLength;
void *authorizationData; } LoginReqDataT;
所以我想要的是一个调试函数,它简单地将结构作为参数并输出结构的所有成员,如下所示:
LoginReqDataT* foo = new LoginReqDataT;
foo->applVersion = 123;
//...
debugPrintMe(foo);
CnctReqDataT* bar = new CnctReqDataT;
strcpy(bar->userID, "123");
strcpy(bar->password, "mypwd");
debugPrintMe(bar);
我目前拥有的是一个无穷无尽的功能,它正在做这样的事情:
template <class T>
void debugPrintMe(T myvar)
{
if (!DEBUG) return;
if (typeid(T) == typeid(ReqCntrlT*))
{
ReqCntrlT* r = (ReqCntrlT*)myvar;
cout << "reqControl: " << endl
<< "\tconnectionID: " << r->connectionID << endl
<< "\tdbApplID: " << r->dbApplID << endl
//...
<< "\tloginID: " << r->loginID << endl << endl;
}
else if (typeid(T) == typeid(CallBkAppDataT*))
{
CallBkAppDataT* c = (CallBkAppDataT*)myvar;
cout << "appData: " << endl
<< "\tappRespBlockSize " << c->appRespBlockSize << endl
//...
<< "\tstreamType: " << c->streamType << endl << endl;
}
//... and so on
}
有没有更优雅的方法来做到这一点?
【问题讨论】:
-
您是否考虑过在您的结构上使用 toString 方法?
-
@fosrvarir:我不允许修改任何结构
标签: c++ debugging templates casting struct