Template 関数で値の入れ替え

Template 関数で、受け取ったパラメータの値を入れ替えます。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. template(テンプレート)関数を使って、パラメータで受け取った領域の値を入れ替えてみましょう。
    template 関数 Swap() を呼び出す main() 関数です。
    最初に int 型を、続いて float 型の領域の値を入れ替えます。
    ポインタを渡すので &d1 のように「&」を付けて呼び出します。
    Swap<int> のように、明確に型を指定して呼び出すことも出来ます。
    void  main()
    {   int     d1,d2;
        d1= 3;
        d2= 7;
    
        printf("元の状態  d1=%d,  d2=%d\n",d1,d2);
        Swap(&d1,&d2);
        //Swap<int>(&d1,&d2);
        printf("入れ替え  d1=%d,  d2=%d\n",d1,d2);
    
        float   f1,f2;
        f1= 12.3f;
        f2= 234.5f;
    
        printf("元の状態  f1=%f,  f2=%f\n",f1,f2);
        Swap(&f1,&f2);
        //Swap<float>(&f1,&f2);
        printf("入れ替え  f1=%f,  f2=%f\n",f1,f2);
    }
    
  2. template 関数を使うと関数の型を呼び出し側の型に合わせてくれます。
    <class Type> で呼び出し側から渡された型を Type で受け取ります。
    class を使うのが主流ですが、次のように typename を使うことも出来ます。
    template<typename Type>
    ポインタが渡されるので Type* n1 のように「*」を付けます。
    template<class Type>
    void  Swap(Type* n1, Type* n2)
    {
        Type wk;
        wk= *n1;
        *n1= *n2;
        *n2= wk;
    }
    
  3. プログラムを実行して領域の値が入れ替わることを確認して下さい。

reference(参照)で受ける

  1. 同じプログラムを reference を使ってプログラミングしてみましょう。
    reference の説明は 引数を reference で受け取る を参照して下さい。
    main() 関数は次のようになります。
    呼び出し側は通常の呼び出しと同じで & が使われていないことに注目して下さい。
    //★ MAIN PROGRAM
    void  main()
    {   int     d1,d2;
        d1= 3;
        d2= 7;
    
        float   f1,f2;
        f1= 12.3f;
        f2= 234.5f;
    
        Swap(d1,d2);
        printf("d1=%d,  d2=%d\n",d1,d2);
    
        Swap(f1,f2);
        printf("f1=%f, f2=%f\n",f1,f2);
    }
    
  2. template を使った Swap() 関数です。
    Type の後に & が付けられていることに注目して下さい。
    これが reference(参照)で受け取る指定です。
    ポインタのように、間接参照「*n1」やアロー演算子「n1->」は使いません。
    template<typename Type>
    void  Swap(Type& n1, Type& n2)
    {
        Type wk;
        wk= n1;
        n1= n2;
        n2= wk;
    }
    
  3. プログラムを実行して領域の値が入れ替わることを確認して下さい。

超初心者のプログラム入門(C/C++)