考虑以下伪代码:
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
}
}