专用于整数值集的模板

Specialize template for set of integer values

本文关键字:用于 整数 专用      更新时间:2023-10-16

给定一组已知的整数值(在本例中为 1-4(。

有没有办法专门化并调用这些值之一的模板化函数,该函数很好读且比这更短:

template<int level>
int function(){
  //do something
  return level;
}
void wrapper(int level)
{
  switch (level)
  {
    case 1:
      function<1>();
      break;
    case 2:
      function<2>();
      break;
    case 3:
      function<3>();
      break;
    case 4:
      function<4>();
      break;
  }
}
int main()
{
  wrapper(4);
}

您可以使用 Boost.Preprocessor 为您展开循环。

#include <boost/preprocessor/repetition/repeat_from_to.hpp>
template<int level>
int function() {
  //do something
  return level;
}
#define GENERATE(Z, N, _)                       
  case N:                                       
    function<N>();                              
    break;
void wrapper(int level)
{
  switch ( level )
  {
    BOOST_PP_REPEAT_FROM_TO(0, 10, GENERATE, nil);
  default:
    break;
  }
}
int main()
{
  wrapper(4);
}

预处理的代码如下所示(缩短(

void wrapper(int level)
{
  switch ( level )
  {
    case 0: function<0>(); break; case 1: function<1>(); break; case 2: function<2>(); break; case 3: function<3>(); break; case 4: function<4>(); break; case 5: function<5>(); break; case 6: function<6>(); break; case 7: function<7>(); break; case 8: function<8>(); break; case 9: function<9>(); break;;
  default:
    break;
  }
}