专用于整数值集的模板
Specialize template for set of integer values
给定一组已知的整数值(在本例中为 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;
}
}
相关文章:
- C++模板函数,用于比较任何无符号整数和有符号整数
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- C++,概念不适用于无符号整数作为结果类型?
- 递归函数,用于查找 2 个整数之间的最大值
- 在VS2017中使用整数用于输出debugstring
- llvm createfcmpone等效用于整数
- 用于存储原子整数的数组
- 编译器用于编译 128 位整数的基本算术运算的技巧
- scanf()仅用于阵列的第一个整数
- 哪种整数类型可以安全且便携式用于始终保持指针值
- AVX __M256I整数部门用于签名的32位元素
- 使用向量向量,回推整数不适用于 Mac OS X
- 用于在2个带符号整数区间之间进行除法的C++算法
- 可用于存储和管理整数集合的最佳C++数据结构是什么
- 哪种数据结构和设计用于选择最佳整数集
- 长整数不适用于 8 的幂C++
- 条件语句,用于验证事务模块(.cpp)标头中#define(d)整数提供的范围
- C++帮助.数组不适用于整数
- 一种用于整数的下界和上界查询的快速数据结构
- %运算符不适用于整数变量