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