所以我有一个表格类:
template <typename T, template <typename T> class Container = std::vector>
class MyArray : Container<T>
{
...
}
现在我正在尝试将其实例化为
template <typename T>
class MyClass
{
MyArray<T> array;
}
这会产生错误:
error: type/value mismatch at argument 2 in template parameter list for 'template<class T, template<class T> class Container> class MyArray'
MyArray<T> y;
它指向>
的{{1}}。
这有什么问题?为什么我没有默认模板参数?
感谢。
答案 0 :(得分:6)
问题是std::vector
有两个模板参数:类型和分配器。许多其他容器类型将采用其他策略参数,这些参数具有允许您实例化T<U>
的默认值。
为了支持这一点,您可以说模板模板参数应使用可变参数模板(typename...
)至少一个模板参数:
template <typename T, template <typename, typename...> class Container = std::vector>
class MyArray : Container<T>
{
...
}