реклама на сайте
подробности

 
 
> С++11 шаблонная функция, argument deduction, Не понятный но рабочий кусок кода
sigmaN
сообщение Feb 22 2017, 22:38
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Мне надо было обойти std::tuple
Нагуглил вот такой рабочий кусок кода http://stackoverflow.com/a/8993311
Код
#include <iostream>
#include <tuple>

template<std::size_t> struct int2type{};

template<class Tuple, std::size_t I>
void print_imp(Tuple const& t, int2type<I>){
  print_imp(t, int2type<I-1>());
  std::cout << ' ' << std::get<I>(t);
}

template<class Tuple>
void print_imp(Tuple const& t, int2type<0>){
  std::cout << std::get<0>(t);
}

template<class Tuple>
void print(Tuple const& t){
  static std::size_t const size = std::tuple_size<Tuple>::value;
  print_imp(t, int2type<size-1>());
}

В первый вызов print_imp() в качестве второго аргумента передается экземпляр int2type с шаблонным параметром size-1.
Код
print_imp(t, int2type<size-1>());

Соответственно попадаем сюда
Код
template<class Tuple, std::size_t I>
void print_imp(Tuple const& t, int2type<I>){
  print_imp(t, int2type<I-1>());
  std::cout << ' ' << std::get<I>(t);
}


КАК из того переданного экземляра int2type мы получили сохраненное там ранее I??????????

Я бы понял, если бы реализация int2type была более "классической", как у Александреску в библиотеке Loki, где внутри класса int2type есть static с сохраненным значением, но тут просто какая-то магия!!!


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 02:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01337 секунд с 7
ELECTRONIX ©2004-2016