c++ - 如何使用类型名和非类型名模板参数调用泛型函数?
问题描述
我需要使用以下原型实现一个函数:
template<typename Iterator, size_t NBITS>
void radix_sort(Iterator first, Iterator last) {
// some code
}
如果没有NBITS
模板参数,它会自己找出 Iterator 是什么,我会调用没有<>
. 这里我想指定NBITS
调用函数时的值。
我不确定Iterator
在这种情况下是否需要提供 too 的类型,以及我将如何做到这一点。
我可以在为 提供值的同时以它可以自己找出 Iterator 的方式调用它NBITS
吗?
注意:我不允许编辑原型
解决方案
使用当前函数模板,Iterator
如果您还想指定参数,则需要显式提供模板参数size_t
。您可以通过将第一个参数的类型传递给函数来做到这一点
std::vector<int> v;
radix_sort<decltype(v.begin()), 42>(v.begin(), v.end());
为了避免Iterator
在调用站点指定,您可以添加另一个交换模板参数的重载,并使用推导的类型调用您的重载
template<std::size_t NBITS, typename Iterator>
void radix_sort(Iterator first, Iterator last)
{
radix_sort<Iterator, NBITS>(first, last);
}
推荐阅读
- python - startfile" 文件路径应该是字符串、字节或 os.Pathlike,而不是列表
- spring-boot - 无法在 tcp://xxx.xxx.xx.xxx:2375 连接到 Docker 守护程序。docker 守护进程是否正在运行?
- python - Python 错误不可散列类型:带有熊猫 iloc 的“列表”
- c++ - 媒体基础:使用 Direct3D 11 的自定义拓扑
- javascript - 当文本区域中存在文本时更改表单提交按钮的(样式) - Jade / Pug
- java - 用普通文本字体替换字符串
- java - 无法@Mock Autowired 对象
- git - 如何更新本地存储库
- python - CSS 选择器不遵循 bs4 的 ':nth-child' 逻辑
- postgresql - 如何在 postgresql 中插入和选择图像