2011-02-27 111 views
3

此問題關注模板元編程結構。我發現了兩篇文章(onetwo,但是兩篇文章並沒有顯示有力的證據,但我相信這些說法),它們提供了證據表明C++ 0x原型編譯器將指數編譯時間轉換爲線性編譯時間。C++ 0x TMP編譯速度

我有一個模糊的暗示,汽車,decltype和variadic模板將有東西是促成這一點。我希望看到的是對語言和編譯器技術進行更改的解釋,特別是解釋如何和爲什麼。

就我的技能水平而言,我在憤怒中使用了提升TMP庫精神,以及一些玩具MPL程序。

+0

有趣的,你可以提供兩個提到的文章的鏈接? – yonilevy 2011-02-27 14:41:04

+0

我注意到,使用'std :: tuple'和variadic模板一起使用比使用等效boost類更快(並且生成更清晰的錯誤)。我甚至寫了一個boost.mpl的子集來使用元組。編譯時間縮短,複雜度下降。 – KitsuneYMG 2011-02-28 13:47:14

回答

3

很明顯,第一個編譯器比第二個編譯器處理速度慢,並且像你說的那樣,evidence for that

/* first */ 
template<typename A> 
void f(A const&); 
template<typename A> 
void f(A&); 

template<typename A1, typename A2> 
void f(A1 const&, A2&); 
template<typename A1, typename A2> 
void f(A1&, A2 const&); 
template<typename A1, typename A2> 
void f(A1 const&, A2 const&); 
template<typename A1, typename A2> 
void f(A1&, A2&); 

// ... 

/* second */ 
template<typename ...T> 
void f(T &&...); 

我知道在C++中完全通用的auto沒有解決方法。模擬auto需要數百甚至數千行代碼(請參閱boost.typeof),然後它仍然不是通用的。相同的decltype

+0

這個問題對於使用像prolog或haskell = D這樣的模板機制的精靈庫是成倍增長的。可變參數模板是我正在尋找的答案的一個維度:D這與新功能集合如何相互作用有關,以防止編譯器花費2分鐘編譯靈魂分析器。 – 2011-02-27 22:38:02