成員函數轉換普通函數

 以下是重新寫的模板函數

#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
class Widget
{
    string name;
public:
    Widget(string _name):name(_name)
    {
    }
    ~Widget()
    {
        //cout<<"goodbye:"<<name<<endl;
    }
    void Show(string &str)
    {
        cout<<str<<" say hello"<<endl;
    }
    void Display()
    {
        cout<<"running the function display"<<endl;
    }
};
template<typename Object,typename ResultFunction,typename Function>
ResultFunction  function_cast(Function fun)
{
    ResultFunction result=ResultFunction(*(reinterpret_cast<int*>(&fun)));
    return result;
}
int main()
{
    Widget wid("Shadow");
    string str="Wang";
    typedef void (*WidFunction1)(Widget*);
    WidFunction1 fun1=function_cast<Widget,WidFunction1>(&Widget::Display);
    fun1(&wid);
    typedef void (*WidFunction2)(Widget*,string&);
    WidFunction2 fun2=function_cast<Widget,WidFunction2>(&Widget::Show);
    fun2(&wid,str);
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章