Qt:typeid替代品

rag*_*bit 6 c++ qt typeinfo qtcore

我想知道Qt是否提供了typeid的替代方法来识别变量类型并以人类可读的格式获取它们的名称.我的具体问题如下:

struct gArgument{
    QString type; 
    void* arg;
};

void gargConverter(gArgument* oArg, T data){
    oArg->type = typeid(data).name();
    oArg->arg = static_cast<void*> (&data);
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是概括一个变量以用作函数的输入.作为一个侧节点tyeinfo似乎在我的系统上没有正常工作(我在Windows 7上使用MinGW),如果我尝试:

  int i; std::cout <<   typeid(i).name() << std::endl;
  QString s; std::cout <<   typeid(s).name() << std::endl;
  double d; std::cout <<   typeid(d).name() << std::endl;
  float f; std::cout <<   typeid(f).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)

我明白了

i
7QString
d
f
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

lpa*_*app 5

你可以用这个

const char * QVariant::typeName () const

返回存储在变体中的类型的名称。返回的字符串描述用于存储数据的 C++ 数据类型:例如,“QFont”、“QString”或“QVariantList”。无效变体返回 0。

这将适用于 POD 和注册的内置 Qt 类型。不过,您需要使用以下方法来注册您的自定义类型。

int qRegisterMetaType(const char * typeName)

您可以尝试的另一件事是,尽管QVariant以以下方式使用 Object 的 QMetaObject有点多余:

const char * QMetaObject::className() const

返回类名。

const QMetaObject * QObject::metaObject() const [virtual]

返回指向此对象的元对象的指针。

元对象包含关于继承 QObject 的类的信息,例如类名、超类名、属性、信号和槽。每个包含 Q_OBJECT 宏的 QObject 子类都有一个元对象。

信号/槽连接机制和属性系统需要元对象信息。inherits() 函数也使用元对象。

如果您没有指向实际对象实例的指针,但仍想访问类的元对象,则可以使用 staticMetaObject。

不用说,这仅适用于 QObjects,因此不适用于 QString 等。您需要创建 QObject 子类。

也有一些QMetaType,你可以使用创造,但是是一个有点不同,所以我只是提的是完整的:

int QMetaType::type(const char * typeName) [static]

返回一个名为 typeName 的类型的句柄,如果没有这样的类型,则返回 QMetaType::UnknownType。

在这里您可以找到所有类型:

http://qt-project.org/doc/qt-5.1/qtcore/qmetatype.html#Type-enum