检测容器是否具有迭代器类型



考虑以下伪代码:

template<class Container>
int some_function(const Container& container)
{
      if (container has iterator) { // 
            // get an element by its iterator
      } else {
            // do another action
      }
}

因此,我们有一个功能模板,该模板采用容器类型(例如,向量,列表,valarray或其他内容)。如果给定的容器具有迭代器类型,是否可以确定(运行时)?编译时间?

您使用检测成语

#include<experimental/type_traits>
template<typename T>
using iterator_t = typename T::iterator;
template<typename T>
constexpr bool has_iterator = std::experimental::is_detected_v<iterator_t, T>;
template<class Container>
int some_function(const Container& container)
{
      if constexpr (has_iterator<Container>) {
            // get an element by its iterator
      } else {
            // do another action
      }
}

最新更新