在我的框架中,我想知道调用者客户端代码的行号,文件路径和方法名 。因此,例如,框架有一个方法B(),客户端使用框架并在第X行,文件路径Y调用B()
。对于我做一些错误报告,我想知道X和Y. / p>
明显的解决方案是将B()
包装在一个宏中:
#define B() B(__LINE__, __FILE__, ...)
,以便客户端不必指定__LINE__和__FILE__宏。
这是一个很好的设计选择,如果不是,如何做到这一点好方法?
答案 0 :(得分:1)
您的方法可能没问题,但如果您必须制作大量此类方法,则可能需要考虑替代方法:
struct Location {
const char *file;
int line;
};
#define LOC (Location{__FILE__,__LINE__})
struct Framework {
void B(const Location &);
};
//客户端代码
Framework f;
f.B(LOC);
如果您有很多像B这样的方法,这会减少需要编写的宏的数量,以换取使客户端代码更加繁琐。你必须权衡利弊。