首页 > 解决方案 > 如何使用类型名和非类型名模板参数调用泛型函数?

问题描述

我需要使用以下原型实现一个函数:

template<typename Iterator, size_t NBITS>
void radix_sort(Iterator first, Iterator last) {

// some code

}

如果没有NBITS模板参数,它会自己找出 Iterator 是什么,我会调用没有<>. 这里我想指定NBITS调用函数时的值。

我不确定Iterator在这种情况下是否需要提供 too 的类型,以及我将如何做到这一点。

我可以在为 提供值的同时以它可以自己找出 Iterator 的方式调用它NBITS吗?

注意:我不允许编辑原型

标签: c++templates

解决方案


使用当前函数模板,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);
}

推荐阅读