qt 泛型
时间: 2023-07-08 15:10:43 浏览: 88
Qt中的泛型实现主要依靠模板类和模板函数。模板类可以在类定义时使用泛型类型参数来指定类中的成员类型,比如QList、QVector、QMap等容器类都是模板类,可以存储任意类型的数据。模板函数则可以在函数定义时使用泛型类型参数来指定函数的参数类型、返回值类型或局部变量类型,比如qMin、qMax、qBound等函数都是模板函数,可以接受任意类型的参数。
以下是一个使用泛型类型参数实现的QList查找函数的例子:
```cpp
template<typename T>
int findIndex(const QList<T>& list, const T& value)
{
for(int i = 0; i < list.size(); i++)
{
if(list[i] == value)
{
return i;
}
}
return -1;
}
```
以上代码定义了一个模板函数findIndex,该函数接受一个QList类型的参数和一个泛型类型的参数value,用于查找value在list中的索引,如果找到则返回索引值,否则返回-1。在调用该函数时,可以指定具体的类型参数,例如:
```cpp
QList<int> intList;
intList << 1 << 2 << 3 << 4 << 5;
int index = findIndex(intList, 3); // index = 2
```
以上代码创建了一个存储int类型的QList,然后调用findIndex函数查找值为3的元素在列表中的索引。由于函数是泛型的,因此也可以用于查找其他类型的数据,例如:
```cpp
QList<QString> strList;
strList << "hello" << "world" << "qt";
int index = findIndex(strList, "world"); // index = 1
```
以上代码创建了一个存储QString类型的QList,并用findIndex函数查找值为"world"的元素在列表中的索引。需要注意的是,使用泛型类型参数时要注意类型匹配问题,否则会出现编译错误。