Здравейте, практикувам с шаблони и дедукция на тип и исках да опитам да направя шаблон на проста функция с вложени параметри на шаблона, за да отпечатам съдържанието на всеки 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 контейнер. Следователно, ако вектор от ints беше предаден в 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-parameter:template<template</*something*/> class CONT>
- person dyp   schedule 14.06.2015