Lorsque vous utilisez une structure comme paramètre formel pour affecter une valeur à une autre structure, vous souhaitez uniquement modifier les paramètres d'une partie du contenu de la structure sans modifier tous les paramètres. Vous pouvez utiliser la réification d'affichage.
Pour un nom de fonction donné, il peut y avoir des fonctions non modèles, des fonctions modèles et des fonctions modèles d'affichage matérialisées et leurs modèles surchargés.
Le prototype et la définition de la matérialisation de l'affichage doivent commencer par le modèle <> et indiquer le type par son nom.
La réification a la priorité sur les modèles normaux, et les fonctions non-modèles ont la priorité sur la réification et les modèles normaux.
Voici les fonctions non modèles, les fonctions modèles et les prototypes concrets utilisés pour échanger des structures de poste:
//非模板函数原型
void swap(job &,job &);
//模板原型
template<typename T>
void swap(T &,T&);
//显示具体化
template<>void swap<job>(job &,job &);
exemple de démonstration:
#include <QCoreApplication>
#include<QDebug>
#include<vector>
#include<iostream>
using namespace std;
template<typename T>
void swapData(T& a,T &b)
{
T temp;
temp = a;
a = b;
b = temp;
}
struct job
{
char name[40];
double salary;
int floor;
};
//显示具体化
template<>void swapData<job>(job &j1,job &j2)
{
double t1;
int t2;
t1 = j1.salary;
j1.salary = j2.salary;
j2.salary = t1;
t2 = j1.floor;
j1.floor = j2.floor;
j2.floor = t2;
}
void show(job &j)
{
cout<<"name: "<<j.name<<" salary: "<<j.salary<<" floor: "<<j.floor<<endl;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int i = 10,j=20;
swapData(i,j);
cout<<"\n";
job sue = {"su",7000,2};
job alice = {"alice",12121,3};
show(sue);
show(alice);
swapData(sue,alice);
cout<<"after switch ....";
show(sue);
show(alice);
return a.exec();
}