繁体   English   中英

获取调用函数的类的名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM