2017-12-02 11 views
0

次の擬似コードを検討しているかどうかを検出します。指定されたコンテナにイテレータタイプがあるかどうかを判定することは可能ですか?コンパイル時間?は、コンテナがイテレータ型か

+1

を使用しています。しかし、イテレータをコンテナではなくパラメータとして取ることは、通常、より柔軟で再利用可能です。 – Galik

+0

コンテナにイテレータタイプがある場合とサポートされていない場合の両方をサポートする必要がありますか?あなたのコードはあなたが行うことを暗示していますが、それはあなたが尋ねた質問ではありません。 – tweej

+0

はい、両方のケースをサポートしたいと思います。私の質問は:コンテナがイテレータの型を持っているかどうかを判断し、コードスニペットで条件として表現しました。私はそれが私が尋ねた質問だと思う。 –

答えて

2

それはそれはイテレータを持って `STL`コンテナである場合は、detection idiom

#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 
     } 
} 
関連する問題