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仅仅是个语法糖,用于提高代码的可读性和减少字符输入个数,但是当我尝试不使用typedef也不使用模板实现operator的时候,失败了。

遂意识到必须使用typedef实现类型转换,分析原因呢,可能因为类型转换的时候,你或者编译器必须知道“你想把这个class转成什么类型”,也就是说,你必须将目标明确地告诉编译器,而如果不使用typedef,相当于“目标类型是匿名的”,不符合逻辑!因为你或者编译器都不知道目标类型,即使编译器知道,你,作为代码的用户,你不知道,也就是说,那个转换函数没法被用户使用!

综上,必须知道目标类型,也就是说,必须使用typedef或者模板!




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值