QT c++类模板的使用
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication5.h"
class QtWidgetsApplication5 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication5(QWidget *parent = nullptr);
~QtWidgetsApplication5();
template <typename T>
T getMax(T x, T y); //函数模板
template <class T>
class Txx //类模板
{
private:
T name;
public:
Txx(T n) :name(n)
{
}
T getName()
{
return name;
}
};
private:
Ui::QtWidgetsApplication5Class ui;
};
函数模板实现:
#include "QtWidgetsApplication5.h"
#include "Dll3.h"
#pragma comment (lib,"Dll3.lib")
#include <qmessagebox.h>
#pragma execution_character_set("utf-8")
#include <qdebug.h>
QtWidgetsApplication5::QtWidgetsApplication5(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
this->setWindowIcon(QIcon(":/imgs/multi.ico"));
int aa= MathFunc::fnAdd(1,2);
// QMessageBox::information(this,"title","加法结果:"+QString::number(aa));
int aa2 = MathFunc::fnSub(9, 2);
// QMessageBox::information(this, "title", "减法结果:" + QString::number(aa2));
connect(ui.pushButton_getMax, &QPushButton::clicked, this, [=] {
qDebug() << "max value is: " << getMax(3, 2);
qDebug() << "max value is: " << getMax(3.3, 2.3);
Txx<int> txx(666);
//Txx tt2(777);
qDebug() << "age value is: " << txx.getName();
});
}
template<typename T>
inline T QtWidgetsApplication5::getMax(T x, T y)
{
return x > y ? x : y;
}
QtWidgetsApplication5::~QtWidgetsApplication5()
{
}
Txx为类模板的调用。Txx<int >可以正常调用,Txx tt2(777)这样使用时报错,
因为类的模板参数推导仅在 C++17 之后可用
属性中设置即可
C + + 中函数重载和模板之间的区别
在了解 C + + 中的函数重载和模板之间的区别之前,首先要知道 C + + 中的多态性是什么。
多态性意味着具有多种形式。多态性是面向对象编程的一个重要概念。可以将多态性定义为函数或消息以多种形式显示的能力。
C + + 中的函数重载和模板都是 C + + 中多态性的示例,即静态多态。当需要定义执行类似操作的多个函数时,应该使用函数重载。另一方面,当需要定义执行相同操作的多个函数时,应该在 C + + 中使用模板。
C + + 中的函数重载和模板之间最重要的区别之一是模板不能接受不同数量的参数,但重载函数可以接受不同数量的参数。
应用:
函数模板:参数个数相同,类型不同,功能相同(如:用于比较)
函数重载:参数个数不同,类型不同,功能不同