我看不到模板模板参数曾经有用的情况,只是可以将模板模板参数替换为一个同样可以正常使用的模板参数。参考我的示例:
template<template<typename, typename...> typename Cont, typename T, typename... Args>
void Foo(Cont<T, Args...> container)
{
for (auto i : container)
std::cout << i << " ";
std::cout << std::endl;
}
template<typename T>
void Bar(T container)
{
for (auto i : container)
std::cout << i << " ";
std::cout << std::endl;
}
这些将具有相同的功能,并且Bar
将在定义迭代器(不需要分配器)的任何容器上工作。 Foo
做同样的事情,但是写起来更加混乱(理解起来也更加混乱)。我不知道是否错过了模板模板参数的要点,但是对我来说,它们似乎毫无用处,因为即使没有其他参数,单个模板参数也会推导类型。
还-我应该对模板模板参数使用typename
还是class
吗?
template<typename> class T
或
template<typename> typename T