1. 程式人生 > >使用boost::enable_if與boost::type_traits在模板中實現對模板型別的介面的限制

使用boost::enable_if與boost::type_traits在模板中實現對模板型別的介面的限制

直上原始碼:

#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標準,越來越強大。

現在越來越感覺到設計的重要性,良好的設計讓程式碼不失簡潔又不會帶來為了簡潔而簡潔導致的額外負擔

當我們處於一個流程化的世界的時候,卻把關注點集中於對現實世界物件的模擬,卻忘了對流程的處理才是本質的需求
勿因設計而設計,因需要而設計,面向物件濫用則不如不用。