从模板参数中获取qt元对象类型名称

时间:2016-03-18 11:15:14

标签: c++ qt qt4

在qt中,可以使用元对象系统通过调用QMetaMethod::parameterTypes()来获取插槽参数的类型名称。 例如。对于void someSlot(SomeClass c);,它会返回"SomeClass"

有没有办法从模板参数中获取相同的类型名称? 即我想致电somehowGetName<SomeClass>()并获取"SomeClass"作为结果。

重要的是,返回的名称正是qt使用的名称,并且它适用于所有编译器。因此,解析type_info::name()的输出不是解决方案。

如果应该避免所有可能的宏。另请注意,SomeClass不会继承QObject

因此,我可能会问,如果有办法获得给定类型的qts内部名称。

1 个答案:

答案 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
}