Reificación de visualización de dos plantillas de función C ++

Cuando se utiliza una estructura como parámetro formal para asignar un valor a otra estructura, solo desea cambiar los parámetros de parte del contenido de la estructura sin cambiar todos los parámetros. Puede utilizar la reificación de visualización.

Para un nombre de función dado, puede haber funciones que no sean de plantilla, funciones de plantilla y mostrar funciones de plantilla materializadas y sus plantillas sobrecargadas.

El prototipo y la definición de la materialización de la pantalla deben comenzar con la plantilla <> e indicar el tipo por nombre.

La reificación tiene prioridad sobre las plantillas regulares, y las funciones que no son de plantilla tienen prioridad sobre la reificación y las plantillas regulares.

Las siguientes son las funciones que no son de plantilla, las funciones de plantilla y los prototipos concretos que se utilizan para intercambiar estructuras de trabajo:
 

//非模板函数原型

void swap(job &,job &);

//模板原型

template<typename T>

void swap(T &,T&);

//显示具体化

template<>void swap<job>(job &,job &);

ejemplo de demostración:

#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();
}

Supongo que te gusta

Origin blog.csdn.net/weixin_41882459/article/details/114020587
Recomendado
Clasificación