[英]Get the name of the class calling a function
我正在Qt中为一个项目编写一个调试类,我想知道我在哪个类中,所以我写:
MyClass::function1()
{
DEBUG_IN("[MyClass] Enters function1()")
....do something
DEBUG_OUT("[MyClass] Exits function1()");
}
编辑: DEBUG_IN()
和DEBUG_OUT()
是全局函数。 它们不属于MyClass类
是否可以获取调用DEBUG()的类的名称?
(以及调用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()
将为您提供可读的类名。 没有指定此名称的构造方式,因此您的编译器可能不会提供确切的类名称,但对于调试目的应该是很好的。
由于DEBUG_IN和DEBUG_OUT是自由函数,因此您需要将类类型作为参数传递。 一个简单的模板应该可以解决问题
template<typename CLASSNAME>
void DEBUG_IN(QString msg, CLASSNAME* that)
{
... typeid(*that).name()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.