qt头文件定义模板类,cpp文件实现函数功能
时间: 2024-03-02 12:50:42 浏览: 27
在Qt中,模板类可以使用与C++相同的方式定义和实现。下面是一种将模板类的声明和实现分离到不同文件的方式。
首先,我们在头文件中定义模板类的声明,例如:
```c++
// MyTemplateClass.h
#ifndef MYTEMPLATECLASS_H
#define MYTEMPLATECLASS_H
template <typename T>
class MyTemplateClass
{
public:
MyTemplateClass(T value);
void printValue();
private:
T m_value;
};
#endif // MYTEMPLATECLASS_H
```
然后,我们可以在实现文件中提供模板类的具体实现,例如:
```c++
// MyTemplateClass.cpp
#include "MyTemplateClass.h"
#include <iostream>
template <typename T>
MyTemplateClass<T>::MyTemplateClass(T value) : m_value(value)
{
}
template <typename T>
void MyTemplateClass<T>::printValue()
{
std::cout << "Value: " << m_value << std::endl;
}
// 显式实例化模板类
template class MyTemplateClass<int>;
template class MyTemplateClass<float>;
```
在这里,我们实现了构造函数和`printValue`函数,并显式实例化了`MyTemplateClass<int>`和`MyTemplateClass<float>`。显式实例化模板类是必要的,因为编译器需要知道模板类的实例化类型以便生成实例化代码。
最后,在使用模板类的文件中,只需要包含头文件即可,例如:
```c++
// main.cpp
#include <QCoreApplication>
#include "MyTemplateClass.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyTemplateClass<int> intObj(42);
intObj.printValue();
MyTemplateClass<float> floatObj(3.14f);
floatObj.printValue();
return a.exec();
}
```
在这里,我们创建了一个`MyTemplateClass<int>`类型的对象和一个`MyTemplateClass<float>`类型的对象,并调用了它们的`printValue`函数。当编译器编译`main.cpp`文件时,它将通过头文件`MyTemplateClass.h`找到模板类的声明,然后通过实现文件`MyTemplateClass.cpp`找到模板类的具体实现。