直上源码:
#include <cstdio> #include <iostream> #include <boost/utility.hpp> #include <boost/type_traits.hpp> struct IHello { virtual void Hello() = 0; }; struct CHello:public IHello { virtual void Hello() { std::cout<<"Hello World"<<std::endl; } }; struct NoHello { void Hello() { std::cout<<"No Hello World"<<std::endl; } }; //此处要求T必须是继承自IHello template<typename T> void ShowHello(T* shower) { typedef boost::enable_if<boost::is_base_of<IHello,CHello>,IHello>::type HelloType; HelloType* hell_shower = shower; hell_shower->Hello(); } int main(int argc,char** argv) { CHello hello; ShowHello(&hello); //不是继承自IHello,则编译无法通过 NoHello no_hello; ShowHello(&no_hello); return 0; }
代码写得比较简单,主要是为了验证想法,C++有了boost和0x标准,越来越强大。
现在越来越感觉到设计的重要性,良好的设计让代码不失简洁又不会带来为了简洁而简洁导致的额外负担
当我们处于一个流程化的世界的时候,却把关注点集中于对现实世界物件的模拟,却忘了对流程的处理才是本质的需求
勿因设计而设计,因需要而设计,面向对象滥用则不如不用。