以下是重新寫的模板函數
#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;
}