type traits techniques 01
5602 ワード
is_iterable
namespace detail_type_traits {
template<class T>
auto is_iterable(int) -> decltype(std::begin(std::declval<T&>()) != std::end(std::declval<T&>()), void(), ++std::declval<decltype(std::begin(std::declval<T&>()))&>(), void(*std::begin(std::declval<T&>())),std::true_type{});
template<class T>
std::false_type is_iterable(...);
}
template<class T>
using is_iterable = decltype(detail_type_traits::is_iterable<T>(0));
source: https://stackoverflow.com/questions/13830158/check-if-a-variable-is-iterable
is_gettable (usable like as tuple)
namespace detail_type_traits {
template<class T>
auto is_gettable(int) -> decltype(std::get<0>(std::declval<T&>()), std::true_type{});
template<class T>
std::false_type is_gettable(...);
}
template<class T>
using is_gettable = decltype(detail_type_traits::is_gettable<T>(0));
Example
namespace detail_type_traits {
template<class T>
auto is_iterable(int) -> decltype(std::begin(std::declval<T&>()) != std::end(std::declval<T&>()), void(), ++std::declval<decltype(std::begin(std::declval<T&>()))&>(), void(*std::begin(std::declval<T&>())),std::true_type{});
template<class T>
std::false_type is_iterable(...);
}
template<class T>
using is_iterable = decltype(detail_type_traits::is_iterable<T>(0));
source: https://stackoverflow.com/questions/13830158/check-if-a-variable-is-iterable
namespace detail_type_traits {
template<class T>
auto is_gettable(int) -> decltype(std::get<0>(std::declval<T&>()), std::true_type{});
template<class T>
std::false_type is_gettable(...);
}
template<class T>
using is_gettable = decltype(detail_type_traits::is_gettable<T>(0));
Example
Author And Source
この問題について(type traits techniques 01), 我々は、より多くの情報をここで見つけました https://qiita.com/angeart/items/457f1005a18f3a5ed7cf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .