2015-08-17 156 views
-1

我正在閱讀有關C++元編程的Abrahams,Gurtovoy書。我必須承認,我不明白使用模板元編程的解釋。例如:C++元編程,爲什麼和什麼時候應該使用?

您想要根據問題域的抽象表示代碼。

或者:

否則你將不得不寫的樣板實現代碼很大。

有人能詳細說明嗎?

+0

關於亞馬遜的第一章,我看到它立即開始通過詳細解釋並舉例說明。 –

回答

2

我也使用C++進行科學計算,是的,模板元編程有很大的幫助。一種用途是幫助實現通用數值方法。一個典型的例子是std::sort,這是一種排序的抽象,它可以用於任何你想要排序的東西。

同樣,可能會寫入,比方說,一個模板樣條內插,可以內插Y(X)的任何類型的x實現標量的概念(訂購,運營商+-*),然後鍵入y即interpolateable(允許y+y,y-yy*x)。一旦你建立了這樣一個模板,你就可以使用它來插入,比如double(代表時間)的某種矩陣類型,而不需要進一步的改編:它只是立即生效(儘管編譯器必須做一些工作)。

1

您想要根據問題域的抽象表示代碼。

模板元編程(TMP)可用於分離和抽象代碼中的不同任務。例如,Boost.Serialization被實現爲完全不知道您的(用戶)代碼。你只需要提供一些粘合劑,以一種serialize()成員函數的形式提供,而Boost.Serialize將能夠無縫地與你的類一起工作。由於這些都是在編譯期間完成的,所以這種靈活性並不會導致運行成本(與多態性相反)。

否則,您將不得不編寫大量的樣板實現代碼。

TMP技術可用於生成代碼,並有效地分解通用代碼。例如,Boost.Intrusive可讓您在類中(通過各種方式,例如繼承或類型特徵)「導入」行爲,而這只不過是生成代碼並將其注入到類中以將其轉換爲列表,例如列表節點。

+0

Thanks.I打算使用C++進行科學計算,序列化是否用於此? –

+0

@RichardRublev這些是我頭頂的兩個例子,我不知道這兩個特定的東西對你是否有用。然而,科學計算看起來像一個可以使用TMP進行編譯時抽象的領域,並且真正受益於速度提升(與「經典」,多態驅動的抽象相比)。 – Quentin

相關問題