Привет, я практикуюсь с шаблонами и выводом типов и хотел попробовать создать простой шаблон функции с вложенными параметрами шаблона для распечатки содержимого любого контейнера stl:
template <template<T, ALLOC> CONT>
void Print(const CONT<T, ALLOC> &c) {
for (const T &elem : c) std::cout << elem << " ";
std::cout << std::endl;
}
И мой тестовый пример:
int main() {
std::list<int> intlist{ 1, 2, 3, 4, 5 };
std::vector<float> floatvec{ 0.2f, 0.5f };
Print(intlist);
Print(floatvec);
}
Однако я получаю ошибку компилятора, из-за которой типы для T и ALLOC не могут быть выведены. Есть ли способ написать эту функцию без явного указания типов аргументов шаблона?
Обратите внимание, что моя цель здесь - определить тип, хранящийся в переданном в stl контейнере. Следовательно, если вектор int был передан в T, будет выведен тип Int.
template<T, ALLOC> CONT
говорит, чтоCONT
- это шаблон с двумя параметрами, не относящимися к типу, типами которых являютсяT
иALLOC
. Это должно привести к поиску именT
иALLOC
, который должен завершиться ошибкой. - Как это: coliru.stacked-crooked.com/a/50c8edf643ed26f0 - person dyp   schedule 14.06.2015class
передCONT
, если это должен быть шаблон параметр-шаблона:template<template</*something*/> class CONT>
- person dyp   schedule 14.06.2015