自定义类型为struct SP104{ BYTE addr0; BYTE addr1; BYTE addr2; };和struct DP104{ BYTE addr0; BYTE addr1; BYTE addr2; QStrig data; }; 泛型类中使用自定义类型,泛型类中有 QMap<QString,QVector<T>>t_map; QCache<QString,QVector<T>>t_cache; QVector<T>t_vctor; 使用 QMetaType::type() 函数获取 自定义的类型,泛型类中根据不同的自定义类型,使用QMetaType::type获取不同类型的数据,并且打印 QMap<QString,QVector<T>>t_map的数据。思考一下。请 用qt5写一段代码,代码包含.h和.cpp。谢谢!
时间: 2024-02-15 13:01:19 浏览: 160
下面是一段示例代码,其中包含了泛型类的定义和使用:
```c++
// mygeneric.h
#ifndef MYGENERIC_H
#define MYGENERIC_H
#include <QString>
#include <QMetaType>
#include <QMap>
#include <QVector>
#include <QCache>
// 自定义类型 SP104
struct SP104 {
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
};
// 自定义类型 DP104
struct DP104 {
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
QString data;
};
// 泛型类 MyGeneric
template<typename T>
class MyGeneric {
public:
MyGeneric() {
// 注册自定义类型
qRegisterMetaType<SP104>("SP104");
qRegisterMetaType<DP104>("DP104");
}
void addData(const QString& key, const T& data) {
// 将数据添加到 QMap 中
QVector<T> vec = t_map.value(key);
vec.append(data);
t_map.insert(key, vec);
// 将数据添加到 QCache 中
t_cache.insert(key, vec);
}
void printData() {
// 打印 QMap 中的数据
for (auto it = t_map.constBegin(); it != t_map.constEnd(); ++it) {
qDebug() << it.key() << ":";
for (const T& data : it.value()) {
printDataHelper(data);
}
}
}
private:
void printDataHelper(const SP104& data) {
qDebug() << data.addr0 << data.addr1 << data.addr2;
}
void printDataHelper(const DP104& data) {
qDebug() << data.addr0 << data.addr1 << data.addr2 << data.data;
}
QMap<QString, QVector<T>> t_map;
QCache<QString, QVector<T>> t_cache;
QVector<T> t_vctor;
};
#endif // MYGENERIC_H
// mygeneric.cpp
#include "mygeneric.h"
// 显式实例化泛型类
template class MyGeneric<SP104>;
template class MyGeneric<DP104>;
```
使用示例:
```c++
#include "mygeneric.h"
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
MyGeneric<SP104> spGeneric;
SP104 spData = {1, 2, 3};
spGeneric.addData("SP104", spData);
spGeneric.printData();
MyGeneric<DP104> dpGeneric;
DP104 dpData = {4, 5, 6, "Hello world!"};
dpGeneric.addData("DP104", dpData);
dpGeneric.printData();
return a.exec();
}
```
阅读全文
相关推荐
















