在 C++ 中创建模板函数时,是否有一种简单的方法可以将模板的类型名表示为字符串?我有一个简单的测试用例来显示我正在尝试做的事情(注意显示的代码无法编译):
#include <stdio.h>
template <typename type>
type print(type *addr)
{
printf("type is: %s",type);
}
int main()
{
int a;
print(&a);
}
// Would like to print something like:
// type is: int
我认为当函数被实例化时,类型名应该在编译时可用,但我对模板不太熟悉,我还没有看到将类型名作为字符串获取的方法。
我想这样做的原因是为了进行一些 printf 类型的调试。我有多个线程正在运行,并且使用 gdb 单步执行会更改程序行为。因此,对于某些事情,我想转储有关正在执行哪些功能的信息。这不是太重要,所以如果解决方案过于复杂,我会跳过将此信息添加到我的日志记录功能。但是,如果有一种简单的方法可以做到这一点,那将是有用的信息。
原文由 Gabriel Southern 发布,翻译遵循 CC BY-SA 4.0 许可协议
__PRETTY_FUNCTION__
应该可以解决您的问题(至少在运行时)下面程序的输出是:
如果你真的真的需要类型名作为字符串,你可以破解它(使用
snprintf
而不是printf
)并在’=‘之后和’]‘之前拉取子字符串。