给定一组已知的整数值(在这种情况下为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);
}
答案 0 :(得分:0)
您可以使用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;
}
}