イテレータの型やその他の型に異なる値を出力する関数を記述したいと思います。いくつかの研究を行った後、ここに私が思い付いたものです:C++のさまざまな関数に異なる型をディスパッチするためのコードを簡略化
#include <iostream>
#include <iterator>
#include <experimental/type_traits>
namespace details
{
template <class T, class = void>
struct is_iterator : std::false_type
{
};
template <class T>
struct is_iterator<T, std::experimental::void_t<typename std::iterator_traits<T>::value_type>> : std::true_type
{
};
template <class T>
constexpr auto is_iterator_v = is_iterator<T>::value;
}
template <class T>
std::enable_if_t<!details::is_iterator_v<T>> print(const T &value)
{
std::cout << value;
}
template <class T>
std::enable_if_t<details::is_iterator_v<T>> print(const T &value)
{
std::cout << "(IteratorTo ";
print(*value);
std::cout << ')';
}
しかし、私は私のコードは少し長すぎると、少し複雑だと思います。私のコードを短くしてきれいにすることは可能ですか?
'void_t'を削除するとコードが壊れているようです。 – aschepler
http://coliru.stacked-crooked.com/a/20ee221e917fa468 – aschepler
@aschepler:すべての公平なポイント!私の恥知らずの怠け者。 > _> – ildjarn