小小的代码里面包含了很多知识点:
#include <iostream>
using namespace std;
template<class T>
class classbinder
{
typedef void (T::*PFUN)();
T* _m_object;
PFUN _m_fun;
public:
classbinder()
{
_m_object=NULL;
_m_fun=NULL;
}
//构造函数.
classbinder(T* object,PFUN fun)
{
_m_object=object;
_m_fun=fun;
}
//拷贝构造.
classbinder(const classbinder& mb)
{
_m_object=mb._m_object;
_m_fun=mb._m_fun;
}
//拷贝赋值.
classbinder& operator=(const classbinder mb)
{
if(&mb==this) return *this;
else
{
_m_object=mb._m_object;
_m_fun=mb._m_fun;
}
return *this;
}
//函数对象.
void operator()()
{
(_m_object->*_m_fun)();
}
};
template<class T>
classbinder<T> binder(T* obj,void (T::*pfun)())
{
return classbinder<T>(obj,pfun);
}
class Test
{
public:
void run()
{
cout<<"测试代码而已"<<endl;
}
};
int main(int argc, char* argv[])
{
Test test;
classbinder<Test> cb=binder(&test,Test::run);
cb();
return 0;
}
1.类的构造函数
2.类的拷贝构造函数
3.类的拷贝赋值函数(包括了运算符重载)
4.模板类的使用
5.函数子,函数对象.
6.成员函数指针的定义和使用.
7.模板函数的使用.