在一项作业中,我被要求使用模板特化创建自己的 static_cast 和 dynamic_cast。 如何测试我的静态转换是否真的在编译时完成,动态转换在运行时完成?
template<typename Dst, typename Src>
static Dst my_static_cast(Src src);
template<typename Dst, typename Src>
static Dst my_dynamic_cast(Src src);
最佳答案
不是一个完整的答案,但考虑一下:
class D
{
public:
virtual ~D(){}
};
class A : public D{};
class B{};
现在dynamic_cast<B*>(new A())
编译正常(并返回 0)但是 static_cast<B*>(new A())
导致编译错误。我几乎可以肯定您可以通过 SFINAE 对此进行适当的测试。
当然,此测试假设您只需要区分 100% 符合标准的 static_cast 和 100% 符合标准的 dynamic_cast。为了检测您的实现中的错误,需要进行额外的测试。
编辑: 您无法自动对其进行全面测试。强制转换需要运行时参数,因此无法在编译时对其进行测试。而且,在运行时,编译时计算的东西和运行时计算的东西之间的唯一区别是性能。我不建议通过“好吧,运行时转换不能那么快”来进行测试。它只是不可靠。
关于c++ - 如何测试类型转换时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050238/