0
次の擬似コードを検討しているかどうかを検出します。指定されたコンテナにイテレータタイプがあるかどうかを判定することは可能ですか?コンパイル時間?は、コンテナがイテレータ型か
次の擬似コードを検討しているかどうかを検出します。指定されたコンテナにイテレータタイプがあるかどうかを判定することは可能ですか?コンパイル時間?は、コンテナがイテレータ型か
それはそれはイテレータを持って `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
}
}
を使用しています。しかし、イテレータをコンテナではなくパラメータとして取ることは、通常、より柔軟で再利用可能です。 – Galik
コンテナにイテレータタイプがある場合とサポートされていない場合の両方をサポートする必要がありますか?あなたのコードはあなたが行うことを暗示していますが、それはあなたが尋ねた質問ではありません。 – tweej
はい、両方のケースをサポートしたいと思います。私の質問は:コンテナがイテレータの型を持っているかどうかを判断し、コードスニペットで条件として表現しました。私はそれが私が尋ねた質問だと思う。 –