在qt中,可以使用元对象系统通过调用QMetaMethod::parameterTypes()
来获取插槽参数的类型名称。
例如。对于void someSlot(SomeClass c);
,它会返回"SomeClass"
。
有没有办法从模板参数中获取相同的类型名称?
即我想致电somehowGetName<SomeClass>()
并获取"SomeClass"
作为结果。
重要的是,返回的名称正是qt使用的名称,并且它适用于所有编译器。因此,解析type_info::name()
的输出不是解决方案。
如果应该避免所有可能的宏。另请注意,SomeClass
不会继承QObject
。
因此,我可能会问,如果有办法获得给定类型的qts内部名称。
答案 0 :(得分:0)
您是否尝试过解压缩type_info :: name()的结果:
inline QString demangle(const char *name)
{
#if (__GNUC__ && __cplusplus && __GNUC__ >= 3)
int status = 0;
QString result = "";
char *realname = abi::__cxa_demangle(name, NULL, NULL, &status);
realname == NULL ? result = name : result = realname;
free(realname);
return result;
#else
return name;
#endif
}