我有一个接收整数类型的模板。
template<unsigned int N> void fun()
{
...
}假设我知道变量(n)的所有可能值,有没有办法在运行时使用变量来选择模板?
示例代码来说明我想要做的事情:
template void fun<0>();
template void fun<1>();
...
template void fun<MAX_N>();
void main()
{
int n;
cin >> n;
fun<n%MAX_N>();
}我知道这可以通过一个长开关的情况来完成。有没有更优雅的方式呢?
发布于 2020-05-22 05:53:22
与switch类似,您可以生成函数指针数组:
template <std::size_t ... Is>
void dispatch(std::size_t n, std::index_sequence<Is...>)
{
std::array<void(*)(), sizeof...(Is)> funcs{{&fun<Is>...}};
funcs[n % MAX_N]();
}
void dispatch(std::size_t n)
{
dispatch(n, std::make_index_sequence<MAX_N>());
}https://stackoverflow.com/questions/61944219
复制相似问题