2011-02-27 63 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