谁能实现all_cast!
众所周知,老式的强制类型转换有很多缺点。为此C++提供了一套新的类型转换关键字:reinterpret_cast/static_cast/const_cast。
由于它们的用法类似于函数模板,因此,自行提供模板函数以提供自定义的转换是可行的。boost中的lexical_cast/numeric_cast等就是很好的例子。
现在的问题是,它们并不能取代原来的老式强制。例如在泛型编程中
template<typename A,typename B>
A myfunc(B data)
{
return reinterpret_cast<A>(data);
}
不一定能通过编译。问题是如果B到A有一个隐式的转换,那么至少在VC上就会报错:从类型B到A存在隐式转换,请改用其他表达方法。
从实用的观点看,最好是有个通用的类型转换方法,能够跟老式的转换完全兼容。也就是说,老式转换能处理的它都能处理,并且结果一样。这个函数模板,姑且称为all_cast吧。
当然,all_cast有个最简单的实现方法:
template<typename A, typename B>
A all_cast(B data)
{
return (A)data;
}
但如果将来C++取消了老式强制呢?……当然这在近期不会发生。
不管怎样,探讨一下完全不用老式强制如何实现老式强制的所有功能也是有意义的。
大家不妨探讨一下?