如何减少TMP&的编译时间? C ++中的宏预处理器元编程?

时间:2014-05-30 17:05:40

标签: c++ templates profiling

是否有任何可以处理大量元编程代码的技巧?

我正在使用最新版本的clang。但我可以切换到支持C ++ 14的任何(免费)编译器。

1 个答案:

答案 0 :(得分:1)

  

或者,是否有任何可以处理大堆的技巧   元编程代码?

首选constexpr - 功能到TMP功能,它们通常更快。从C ++ 14开始,你还可以在constexpr函数中使用多个返回工作代码语句,这样可以更加轻松地使用它们。 一般避免递归。并且不要过多关心算法本身的复杂性类,只要它编译得快。 (在TMP代码中,获得更好的复杂性类可能会导致编译速度变慢)。

不要像使用变量模板一样使用递归:

template< typename First, typename ... Tail >
struct A : A<Tail...>

它们创建了二次时间复杂度,因为编译器必须在每个步骤中创建单独的参数列表!这是可以衡量的。请尝试将递归委托给程序中的一个点,最好的方法是将其委托给std::make_index_sequence,然后将所有内容推导出来。

不要使用Boost.PP来生成处理案例的许多部分/显式特化。它没有任何帮助。 200个显式的特殊化只会使情况变得更糟,因为编译器必须搜索特殊化(在主模板旁边)并寻找匹配的第一个也是最专业的一个。