[英]C++ any iterator with a specific value type?
假设我有一个函数模板来遍历某个容器的任何迭代器:
template<class iter_type>
void f(iter_type start, iter_type finish)
{
// loop from start to finish
}
现在问题是我知道该容器的value_type
(而f()
仅对该特定的value_type
有意义)。 有没有办法将iter_type
限制为具有特定的value_type
?
我可能继承自std::iterator
,但f()
只是一小段代码,不值得专用类。
您可以通过std :: iterator_traits获取迭代器的value_type
,然后在编译时检查它,例如
template<class iter_type>
void f(iter_type start, iter_type finish)
{
static_assert(
std::is_same<
typename std::iterator_traits<iter_type>::value_type,
specific_value_type>::value,
"The value_type must be specific_value_type.");
// loop from start to finish
}
你可以使用std::enable_if
:
template<class iter_type>
auto f(iter_type start, iter_type finish)
-> typename std::enable_if<std::is_same<
typename std::iterator_traits<iter_type>::value_type,
particular_value_type
>::value, void>::type
{
// loop from start to finish
}
这将使限制成为函数签名的一部分,这意味着您可以使用具有相同名称和参数的另一个函数模板,只要它对此特定value_type
禁用即可。
编辑 :使用iterator_traits使其更加健壮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.