是否可以使用C ++模板来控制代码生成?

时间:2015-09-24 16:36:36

标签: c++ templates macros code-generation

可以使用C ++模板来控制代码生成吗?

像(伪代码......)

template<int i, int j> void f() {
#if i > j
#define
  //code...
#else
  //code...
#endif
}

(我开始习惯模板,但我想知道它们有多强大。)

谢谢!

1 个答案:

答案 0 :(得分:10)

这样的元编程通常是通过专门化和重载的组合来完成的。在您的情况下,标签调度(将值转换为类型)是一个可行的解决方案:

#include <type_traits>

void f_impl(std::true_type) { /* ... */ }
void f_impl(std::false_type) { /* ... */ }

template <int i, int j> void f() {
  f_impl(std::integral_constant<bool, (i > j)>());
}