Почему вывод параметра не работает в этом параметре шаблона - PullRequest
4 голосов
/ 18 июня 2019

У меня есть следующая функция шаблона, в качестве аргумента которой используется параметр шаблона.

template<typename T, 
         template <typename... ELEM> class CONTAINER = std::vector>
void merge(typename CONTAINER<T>::iterator it )
{
   std::cout << *it << std::endl;
}

И следующий код использует этот код.

std::vector<int> vector1{1,2,3};
merge<int>(begin(vector1));

Работает как положено, но когда я использую

merge(begin(vector1));

Он не может вывести тип T.

Я думал, что он может выводить тип из std::vector<int>::iterator it; как int.

Почему компилятор не может определить тип?

1 Ответ

6 голосов
/ 18 июня 2019

Я думал, что он может выводить тип из std::vector<int>::iterator it; как int.

Почему компилятор не может определить тип?

номер

Компилятор не может: ищите «невыгруженный контекст» для получения дополнительной информации.

И не разумно ожидать удержания.

Предположим, что класс выглядит следующим образом

template <typename T>
struct foo
 { using type = int; };

где тип type равен всегда int; какой бы тип T.

И предположим, что функция выглядит следующим образом

template <typename T>
void bar (typename foo<T>::type i)
 { }

, которые получают значение int (typename foo<T>::type всегда int).

Какой тип T должен быть выведен из следующего вызова?

bar(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...