获取调用函数的类的名称

时间:2015-04-12 17:29:23

标签: c++ qt debugging

上下文

我正在Qt中为一个项目编写一个调试类,我想知道我现在写的是哪个类:

MyClass::function1()
{
   DEBUG_IN("[MyClass] Enters function1()")
   ....do something
   DEBUG_OUT("[MyClass] Exits function1()");
}

编辑: DEBUG_IN()DEBUG_OUT()是全局函数。它们不属于MyClass类

问题

是否可以获取调用DEBUG()的类的名称?

(以及调用DEBUG()的函数的bame?)

所以我可以这样做:

MyClass::function1()
{
   DEBUG_IN("function1()")
   ....do something
   DEBUG_OUT("function1()");
}

DEBUG_IN(QString text)
{
   qDebug() << qPrintable("[")
            << qPrintable(getClassName())
            << qPrintable("] Enters ")
            << qPrintable(text);
}

很多

2 个答案:

答案 0 :(得分:2)

最接近您想要的是__PRETTY_FUNCTION__。这包括完全限定的函数名称和签名。

编辑:

您应该像这样使用它:

#define DEBUG_IN_PRETTY(...) DEBUG_IN(__PRETTY_FUNCTION__, __VA_ARGS__)

然后调用DEBUG_IN_PRETTY(显然DEBUG_IN需要采取额外的参数)。这将扩展呼叫站点的宏。

答案 1 :(得分:2)

确实存在。

typeid(*this).name()

会给你一个可读的类名。未指定如何构造此名称,因此您的编译器可能不会提供确切的类名,但它应该适合于调试目的。

由于DEBUG_IN和DEBUG_OUT是自由函数,因此需要将类类型作为参数传递。一个简单的模板应该可以做到这一点

template<typename CLASSNAME>
void DEBUG_IN(QString msg, CLASSNAME* that)
{
   ...  typeid(*that).name()

}