【发布时间】:2014-07-20 12:35:50
【问题描述】:
有什么技巧可以处理大量元编程代码吗?
我正在使用最新版本的 clang。但我可以切换到任何支持 C++14 的(免费)编译器。
【问题讨论】:
-
替代关闭原因:要求异地工具...
-
或者,有什么技巧可以处理大量元编程代码吗?我也在求一个方法。但感谢您的关注。
有什么技巧可以处理大量元编程代码吗?
我正在使用最新版本的 clang。但我可以切换到任何支持 C++14 的(免费)编译器。
【问题讨论】:
或者,有什么技巧可以处理大量的 元编程代码?
首选constexpr-functions 而不是 TMP-functions,它们通常更快。从 C++14 开始,您不仅可以在 constexpr 函数中使用工作代码的返回语句,还可以更轻松地使用它们。
一般避免递归。并且不要太在意算法本身的复杂度等级,只要编译快就行。 (在 TMP 代码中,获得更好的复杂度类会导致编译速度慢得多)。
不要像这样对可变参数模板使用递归:
template< typename First, typename ... Tail >
struct A : A<Tail...>
它们创建了二次时间复杂度,因为编译器必须在每一步中创建单独的参数列表!这是非常可衡量的。尝试将递归委托给程序中的一个点,最好的方法是将其委托给std::make_index_sequence,然后将所有内容推导出来。
不要使用 Boost.PP 生成许多处理案例的部分/显式特化。它没有帮助。 200 次显式特殊化只会让情况变得更糟,因为编译器必须搜索特殊化(在主模板旁边)并寻找第一个也是最特殊的匹配。
【讨论】: