此问题关注模板元编程结构。我发现了两篇文章(one和two,但是两篇文章并没有显示有力的证据,但我相信这些说法),它们提供了证据表明C++ 0x原型编译器将指数编译时间转换为线性编译时间。C++ 0x TMP编译速度
我有一个模糊的暗示,汽车,decltype和variadic模板将有东西是促成这一点。我希望看到的是对语言和编译器技术进行更改的解释,特别是解释如何和为什么。
就我的技能水平而言,我在愤怒中使用了提升TMP库精神,以及一些玩具MPL程序。
此问题关注模板元编程结构。我发现了两篇文章(one和two,但是两篇文章并没有显示有力的证据,但我相信这些说法),它们提供了证据表明C++ 0x原型编译器将指数编译时间转换为线性编译时间。C++ 0x TMP编译速度
我有一个模糊的暗示,汽车,decltype和variadic模板将有东西是促成这一点。我希望看到的是对语言和编译器技术进行更改的解释,特别是解释如何和为什么。
就我的技能水平而言,我在愤怒中使用了提升TMP库精神,以及一些玩具MPL程序。
很明显,第一个编译器比第二个编译器处理速度慢,并且像你说的那样,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
。
这个问题对于使用像prolog或haskell = D这样的模板机制的精灵库是成倍增长的。可变参数模板是我正在寻找的答案的一个维度:D这与新功能集合如何相互作用有关,以防止编译器花费2分钟编译灵魂分析器。 – 2011-02-27 22:38:02
有趣的,你可以提供两个提到的文章的链接? – yonilevy 2011-02-27 14:41:04
我注意到,使用'std :: tuple'和variadic模板一起使用比使用等效boost类更快(并且生成更清晰的错误)。我甚至写了一个boost.mpl的子集来使用元组。编译时间缩短,复杂度下降。 – KitsuneYMG 2011-02-28 13:47:14