在C ++中用宏包装方法

时间:2016-03-27 22:32:18

标签: c++ debugging error-handling macros

在我的框架中,我想知道调用者客户端代码的行号,文件路径和方法名 。因此,例如,框架有一个方法B(),客户端使用框架并在第X行,文件路径Y调用B()。对于我做一些错误报告,我想知道X和Y. / p>

明显的解决方案是将B()包装在一个宏中:

#define B() B(__LINE__, __FILE__, ...),以便客户端不必指定__LINE__和__FILE__宏。

这是一个很好的设计选择,如果不是,如何做到这一点好方法?

1 个答案:

答案 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这样的方法,这会减少需要编写的宏的数量,以换取使客户端代码更加繁琐。你必须权衡利弊。