获取调用函数的 class 的名称
Get the name of the class calling a function
上下文
我正在为一个项目在 Qt 中编写调试 class,我想知道我在哪个 class 所以现在我写:
MyClass::function1()
{
DEBUG_IN("[MyClass] Enters function1()")
....do something
DEBUG_OUT("[MyClass] Exits function1()");
}
编辑: DEBUG_IN()
和 DEBUG_OUT()
是全局函数。它们不属于 class MyClass
问题
是否可以获取调用 DEBUG() 的 class 的名称?
(以及调用 DEBUG() 的函数的名称?)
这样我就可以做到:
MyClass::function1()
{
DEBUG_IN("function1()")
....do something
DEBUG_OUT("function1()");
}
和
DEBUG_IN(QString text)
{
qDebug() << qPrintable("[")
<< qPrintable(getClassName())
<< qPrintable("] Enters ")
<< qPrintable(text);
}
非常感谢
最接近您想要的是 __PRETTY_FUNCTION__
。这包括完全限定的函数名称和签名。
编辑:
你应该这样使用它:
#define DEBUG_IN_PRETTY(...) DEBUG_IN(__PRETTY_FUNCTION__, __VA_ARGS__)
然后调用DEBUG_IN_PRETTY
(显然DEBUG_IN
需要额外的参数)。这将在调用站点展开宏。
确实有。
typeid(*this).name()
会给你一个可读的class名字。未指定此名称的构造方式,因此您的编译器可能不会给出确切的 class 名称,但它应该有助于调试目的。
由于 DEBUG_IN 和 DEBUG_OUT 是自由函数,您需要将 class 类型作为参数传递。一个简单的模板就可以解决问题
template<typename CLASSNAME>
void DEBUG_IN(QString msg, CLASSNAME* that)
{
... typeid(*that).name()
}
上下文
我正在为一个项目在 Qt 中编写调试 class,我想知道我在哪个 class 所以现在我写:
MyClass::function1()
{
DEBUG_IN("[MyClass] Enters function1()")
....do something
DEBUG_OUT("[MyClass] Exits function1()");
}
编辑: DEBUG_IN()
和 DEBUG_OUT()
是全局函数。它们不属于 class MyClass
问题
是否可以获取调用 DEBUG() 的 class 的名称?
(以及调用 DEBUG() 的函数的名称?)
这样我就可以做到:
MyClass::function1()
{
DEBUG_IN("function1()")
....do something
DEBUG_OUT("function1()");
}
和
DEBUG_IN(QString text)
{
qDebug() << qPrintable("[")
<< qPrintable(getClassName())
<< qPrintable("] Enters ")
<< qPrintable(text);
}
非常感谢
最接近您想要的是 __PRETTY_FUNCTION__
。这包括完全限定的函数名称和签名。
编辑:
你应该这样使用它:
#define DEBUG_IN_PRETTY(...) DEBUG_IN(__PRETTY_FUNCTION__, __VA_ARGS__)
然后调用DEBUG_IN_PRETTY
(显然DEBUG_IN
需要额外的参数)。这将在调用站点展开宏。
确实有。
typeid(*this).name()
会给你一个可读的class名字。未指定此名称的构造方式,因此您的编译器可能不会给出确切的 class 名称,但它应该有助于调试目的。
由于 DEBUG_IN 和 DEBUG_OUT 是自由函数,您需要将 class 类型作为参数传递。一个简单的模板就可以解决问题
template<typename CLASSNAME>
void DEBUG_IN(QString msg, CLASSNAME* that)
{
... typeid(*that).name()
}