繁体   English   中英

C ++任何具有特定值类型的迭代器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM