imperfect C++一书中提到了must_have_base,大致代码如下:
template<typename Sub, typename Fat> class must_have_base { public: ~must_have_base() { void (*pd) (Sub*, Fat*) = constraint; } private: static void constraint(Sub* sub, Fat * fat) { fat = sub; } };
主要思想就是将运行时候可能出现的问题进行约束,让这些问题提早的在编译阶段进行暴露,而又不会引入运行时候的开销。
本书的作者也提到上面这个约束,其实严格上来讲,包含了两种类型相同的时候的情况,那么他也提到了应该进行修改,如果两个类型相同的时候,让编译器报错,遗憾的是,作者并没有提出解决方案,希望大家集思广益,看如何实现这一要求呢?
然后你就可以这样