2010-03-20 45 views
6

有沒有什麼辦法可以一步一步檢查我們說的模板發生了什麼?我的意思是如何一步一步實例化等等?調試元程序

在本書中,我已經提到過here

我發現(2分鐘前)如何二進制可以作爲元函數來實現頗爲有趣的例子。

template <unsigned long N> 
    struct binary 
    { 
     static unsigned const value 
      = binary<N/10>::value << 1 // prepend higher bits 
      | N%10;     // to lowest bit 
    }; 

    template <>       // specialization 
    struct binary<0>      // terminates recursion 
    { 
     static unsigned const value = 0; 
    }; 

,我認爲它可能是能夠走一步看一步這是什麼模板的實例化過程中做了非常有用的。 感謝您的回覆。

+0

不要接受那麼快,也許別人有一個更好的提示:) – 2010-03-20 15:10:13

回答

0

我所見過的最好的是關於Templight的研究論文,但我不知道任何公開的實現。

雖然通過使用描述性靜態(即編譯時)斷言,您可以幫助自己 - 例如,提升static assertMPLs asserts。在某些情況下,它可以幫助引發編譯錯誤(例如,通過使用靜態斷言)來從編譯器獲取模板實例化跟蹤。
此外,沒有什麼能夠阻止您從測試的元函數結果的運行時輸出。

+0

是的我認爲運行時輸出將適合我。謝謝 – 2010-03-20 15:09:58

+0

說了這麼多,現在我遇到了一個輸出問題。我試過這樣的: cout << N; 但我收到錯誤。幫幫我。 – 2010-03-20 15:20:47

+1

你不能只在元函數中拋出輸出語句,但你可以從元函數的具體實例中輸出值,例如'std :: cout << binary<101> :: value'。 – 2010-03-20 15:26:57