C++11(使用最新的 GCC)有没有办法获取调用当前执行的方法(调用者)的方法的名称或文件和行号?
例如,当以下代码失败时,我想在错误消息中使用此信息:
void SomewhereInMyProgram()
{
DoSomething(nullptr);
}
void DoSomething(const char* str)
{
Contract::Requires(str != nullptr);
// ...
}
目前我有代码报告错误发生在DoSomething
. 虽然这在技术上是正确的,但我希望它报告错误发生在SomewhereInMyProgram
任何可能的地方。那会让我的生活轻松很多!
该解决方案可以使用任何 C++11 功能、宏或 GCC 特定的东西,而不是我必须在每个呼叫站点添加的东西。
我认为堆栈跟踪对我没有帮助,因为我不能使用异常处理。实际上,我非常有限:它是一个独立的环境,标准 C++ 头文件不可用。我希望有某种宏观解决方案。
class Contract
{
public:
static void RequiresImpl(bool condition, const char* expression,
const char* file, int line);
#define Requires(condition) RequiresImpl(condition, #condition , \
__FILE__, __LINE__ )
};