Re: ненависть к итераторам
От: Voivoid Россия  
Дата: 25.12.20 19:18
Оценка: 4 (1)
Здравствуйте, Videoman, Вы писали:

V>Вопрос:

V>Где как можно выйти в такой ситуации. Вроде задача элементарная, но времени отняла уже прилично. Так и чувствую себя как ослик бегущий за морковкой, ногу вытащишь, хвост увязнет и т.д.

Ну, например, если ничего не упустил, как-то так ( https://ideone.com/m8igyh ):
template <typename Iter>
using iter_val_t = typename std::iterator_traits< Iter >::value_type;
 
template <typename Iter, typename T>
constexpr bool is_T_iter_v = std::is_same< iter_val_t< Iter >, T >::value;
 
template <typename Iter>
constexpr bool is_wchar_iter_v = std::is_same< iter_val_t< Iter >, wchar_t >::value;
 

template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char >, int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
  std::cout << "i'm char\n";
}
 
template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char16_t > ||
  ( is_wchar_iter_v< Iter > && sizeof( wchar_t ) == sizeof( char16_t ) ), int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
  std::cout << "i'm char16\n";
}
 
template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char32_t > ||
  ( is_wchar_iter_v< Iter > && sizeof( wchar_t ) == sizeof( char32_t ) ), int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
  std::cout << "i'm char32\n";
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.