具有迭代器但固定类型的模板函数

Dr.*_*.D. 5 c++ templates stl function-templates

ProcessIndex( int index );

template< typename Iterator >
void ProcessIndexes( Iterator start, Iterator end )
{
    while( start!=end )
    {
        ProcessIndex(*start++);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何强制只能使用特定的,固定的迭代器值类型调用此函数,例如int(但是任何容器类型)?在这种情况下,ProcessIndex()接受一个int输入,因此,非原始类型的编译失败,并为例如生成警告float.但是,我希望声明能够强制执行int,以便编译失败int.

尽管做了很多努力,但是在这里或其他地方没有找到"解决方案",这是否是微不足道的(?).

Fed*_*dor 0

从 C++20 开始,您可以使用新概念和requires关键字来检查迭代器是否指向int类型:

#include <vector>

void ProcessIndex( int ) {}

template< typename Iterator >
void ProcessIndecies( Iterator start, Iterator end )
    requires( std::same_as<std::decay_t<decltype(*start)>, int> )
{
    while( start!=end )
    {
        ProcessIndex(*start++);
    }
}

int main() {
    std::vector<int> vi;
    ProcessIndecies(vi.begin(), vi.end()); //ok

    std::vector<float> vf;
    //ProcessIndecies(vf.begin(), vf.end()); //fails
}
Run Code Online (Sandbox Code Playgroud)

演示: https: //gcc.godbolt.org/z/hba1qh8bz