我正在编写一个函数作为参数,一个迭代器,任何类型的数据结构。
template<class Iterator>
void Foo(Iterator first, Iterator last) {
...
}
但是,由于我的算法,我必须确保迭代器是随机访问迭代器。如何重新定义我的功能,例如只能将随机访问迭代器用作参数?
我可以将我的迭代器用作随机访问迭代器,因此,在其他情况下,代码不会(或可能不会?(编译。但是我不确定这是最优雅的解决方案。
未编译的代码:
static_assert(std::is_same<std::iterator_traits<Iterator>::iterator_category,
std::random_access_iterator_tag>::value,
"Random-access iterators are required" );
iterator_traits<>::iterator_category
给您什么样的迭代器。将其与std::random_access_iterator_tag
进行比较会告诉您是否是随机访问迭代器。
将整个内容包裹在static_assert
中,如果未满足条件,则会给您一个编译时错误 - 以及一个不错的错误消息。