C++中,将class转换成函数指针(使用运算符重载实现,即operator函数)
这几天在看《Effective C++》,里面提到了std::tr1::function,说是可以将一个函数指针包转成一个function对象,很神奇,所以就想自己实现以下,然后想到了2中实现方式,可以将一个class转换成函数指针,通过运算符重载实现,即operator函数,第一种方式,使用typedef,第二种方式,使用模板:
typedef int (*pft)(char);class C{public:operator pft(){return (pft)0;}};template<typename T>class D{public:operator T(){return (T)0;}};int main(){C c;int(*pf)(char)=c;D<int(*)(char)> d;int(*pf2)(char)=d;return 0;}遂意识到必须使用typedef实现类型转换,分析原因呢,可能因为类型转换的时候,你或者编译器必须知道“你想把这个class转成什么类型”,也就是说,你必须将目标明确地告诉编译器,而如果不使用typedef,相当于“目标类型是匿名的”,不符合逻辑!因为你或者编译器都不知道目标类型,及时编译器知道,你,作为代码的用户,你不知道,也就是说,那个转换函数没法被用户使用!
综上,必须知道目标类型,也就是说,必须使用typedef或者模板!