首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行时选择模板

在运行时选择模板
EN

Stack Overflow用户
提问于 2020-05-22 05:34:17
回答 1查看 44关注 0票数 0

我有一个接收整数类型的模板。

代码语言:javascript
复制
template<unsigned int N> void fun()
{
    ...
}

假设我知道变量(n)的所有可能值,有没有办法在运行时使用变量来选择模板?

示例代码来说明我想要做的事情:

代码语言:javascript
复制
template void fun<0>();
template void fun<1>();
...
template void fun<MAX_N>();

void main()
{
    int n;
    cin >> n;
    fun<n%MAX_N>();
}

我知道这可以通过一个长开关的情况来完成。有没有更优雅的方式呢?

EN

Stack Overflow用户

发布于 2020-05-22 05:53:22

与switch类似,您可以生成函数指针数组:

代码语言:javascript
复制
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>());
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61944219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档