直上源碼:
#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標準,越來越強大。
現在越來越感覺到設計的重要性,良好的設計讓代碼不失簡潔又不會帶來爲了簡潔而簡潔導致的額外負擔
當我們處於一個流程化的世界的時候,卻把關注點集中於對現實世界物件的模擬,卻忘了對流程的處理纔是本質的需求
勿因設計而設計,因需要而設計,面向對象濫用則不如不用。