【问题标题】:How can I decrease compile time of TMP & macro preprocessor metaprogramming in C++? [closed]如何减少 C++ 中 TMP 和宏预处理器元编程的编译时间? [关闭]
【发布时间】:2014-07-20 12:35:50
【问题描述】:

有什么技巧可以处理大量元编程代码吗?

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

【问题讨论】:

  • 替代关闭原因:要求异地工具...
  • 或者,有什么技巧可以处理大量元编程代码吗?我也在求一个方法。但感谢您的关注。

标签: c++ templates profiling


【解决方案1】:

或者,有什么技巧可以处理大量的 元编程代码?

首选constexpr-functions 而不是 TMP-functions,它们通常更快。从 C++14 开始,您不仅可以在 constexpr 函数中使用工作代码的返回语句,还可以更轻松地使用它们。 一般避免递归。并且不要太在意算法本身的复杂度等级,只要编译快就行。 (在 TMP 代码中,获得更好的复杂度类会导致编译速度慢得多)。

不要像这样对可变参数模板使用递归:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多