Template template параметры функций
Только только начал изучать C++, базовый python. Написал следующий код (текст split не привожу, с ним пока проблем нет):
template <template<typename> typename C>
void Print(const C<std::string> &container) {
for (const std::string &path : container) {
std::cout << path << std::endl;
}
}
int main() {
std::string path = "/root/tests/01.a";
char separator = '/';
std::deque<std::string> result = split(path, separator);
Print(result);
return 0;
}
В main в дальнейшем собираюсь использовать Print для вывода элементов set'а. Сейчас пытаюсь вывести элементы дека. Но точно элементы и дека и множества имеют тип string. Поэтому мне нужны template-template параметры для функции Print. Однако компилятор ругается на строку
Print(result);
Пишет- "отсутствуют экземпляры шаблон функции "Print", соответствующие списку аргументов"
Ответы (2 шт):
Поскольку на самом деле дек имеет два шаблонных параметра, попробуйте так:
template <template<typename T, typename = std::allocator<T>> typename C>
void Print(const C<std::string> &container) {
for (const std::string &path : container) {
std::cout << path << std::endl;
}
}
В этом примере нет необходимости где-то указывать нижележащий тип элемента контейнера или количество параметров шаблона контейнера:
void Print(auto const & container)
{
for (auto const & item: container)
{
::std::cout << item << ::std::endl;
}
}