C ++関数テンプレート2の表示の具体化

構造体を正式なパラメータとして使用して別の構造体に値を割り当てる場合、すべてのパラメータを変更せずに、構造体コンテンツの一部のパラメータのみを変更する必要があります。表示の具体化を使用できます。

特定の関数名に対して、非テンプレート関数、テンプレート関数、およびマテリアライズされたテンプレート関数とそれらのオーバーロードされたテンプレートを表示できます。

ディスプレイマテリアライゼーションのプロトタイプと定義は、template <>で始まり、タイプを名前で示す必要があります。

具体化は通常のテンプレートよりも優先され、非テンプレート関数は具体化および通常のテンプレートよりも優先されます。

以下は、ジョブ構造の交換に使用される非テンプレート関数、テンプレート関数、および具体的なプロトタイプです。
 

//非模板函数原型

void swap(job &,job &);

//模板原型

template<typename T>

void swap(T &,T&);

//显示具体化

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

デモの例:

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

おすすめ

転載: blog.csdn.net/weixin_41882459/article/details/114020587