程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 函數指針模板

函數指針模板

編輯:關於C

指向一般函數的指針可實現對參數類型、參數順序、返回值都一樣的函數進行封裝,指向類的成員函數的指針可實現對一個類中的參數類型、參數順序、返回值都一樣的函數進行封裝。對於函數之前,前面已經進行了討論,該文章的鏈接為:/kf/201111/112430.html 
那麼,如何能實現對不同類的成員函數進行統一調用呢?我們首先想到的應該會是函數模板和類模板。
下面就一個例子來說明如何實現對不同類的函數成員函數指針的調用。
 
#include <iostream.h>

class CA
{
public:
   
    int Sum(int a, int b)
    {
        return a+b;
    }
};

class CB
{
public:
    float Sum(float a, float b)
    {
        return a+b;
    }
};


template <typename ClassType, typename ParaType>
class CC
{
public:
    /*函數指針類型模板*/
    typedef ParaType (ClassType::*pClassFun)(ParaType, ParaType);

    /*函數指針函數模塊*/
    ParaType Result(ClassType* pClassType, pClassFun fun, ParaType a, ParaType b)
    {
        return (pClassType->*fun)(a, b);
    }

};


void main()
{
    /*測試整型*/
    CA ca;
    CC<CA,int> cc;
    int a = 3;
    int b = 4;
    cout<<"The sum of a and b is "<<cc.Result(&ca, CA::Sum, a, b)<<endl;

    /*測試浮點型*/
    CB cb;
    CC<CB,float>fcc;
    float fa = 3.3f;
    float fb = 4.6f;
    cout<<"The sum of fa and fb is "<<fcc.Result(&cb, CB::Sum, fa, fb)<<endl;
}
 
總結:
1、指針函數模板的使用需要結合類模板和函數模板。
2、類模板中的函數模板的定義必須位於頭文件,或者和調用函數位於同一文件,且在調用函數的上方,否則會出現編譯錯誤。

 摘自:http://www.cnblogs.com/xianyunhe/archive/2011/11/27/2265148.html
 
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved