gpt4 book ai didi

c++ - Qt:typeid替代

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:44 27 4
gpt4 key购买 nike

我想知道 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);
}

这个想法是泛化一个变量以用作函数的输入。作为侧节点 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;

我明白了

i
7QString
d
f

有什么建议吗?

最佳答案

你可以使用 this :

const char * QVariant::typeName () const

Returns the name of the type stored in the variant. The returned strings describe the C++ datatype used to store the data: for example, "QFont", "QString", or "QVariantList". An Invalid variant returns 0.

这将适用于 POD 和已注册的内置 Qt 类型。您需要使用 following method用于注册您的自定义类型。

int qRegisterMetaType(const char * typeName)

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

const char * QMetaObject::className() const

Returns the class name.

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

Returns a pointer to the meta-object of this object.

A meta-object contains information about a class that inherits QObject, e.g. class name, superclass name, properties, signals and slots. Every QObject subclass that contains the Q_OBJECT macro will have a meta-object.

The meta-object information is required by the signal/slot connection mechanism and the property system. The inherits() function also makes use of the meta-object.

If you have no pointer to an actual object instance but still want to access the meta-object of a class, you can use staticMetaObject.

不用说,这只适用于 QObjects,所以不适用于 QString 等。您需要创建 QObject 子类。

还有一些 QMetaType 可用于创建,但是 this有点不同,所以我只是在这里提到完整:

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

Returns a handle to the type called typeName, or QMetaType::UnknownType if there is no such type.

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

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

关于c++ - Qt:typeid替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com