C++ - 具有默认参数的模板模板参数不起作用
C++ - Template template parameter with default argument doesn't work
所以我有一个 class 的形式:
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;
指向MyArray<T>
的>
。
这有什么问题吗?为什么我不能有默认模板参数?
谢谢。
问题是 std::vector
有两个模板参数:类型和分配器。许多其他容器类型将采用额外的策略参数,这些参数具有默认值以允许您实例化 T<U>
.
为了支持这一点,你可以说你的模板模板参数应该至少一个使用可变模板的模板参数(typename...
):
template <typename T, template <typename, typename...> class Container = std::vector>
class MyArray : Container<T>
{
...
}
所以我有一个 class 的形式:
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;
指向MyArray<T>
的>
。
这有什么问题吗?为什么我不能有默认模板参数?
谢谢。
问题是 std::vector
有两个模板参数:类型和分配器。许多其他容器类型将采用额外的策略参数,这些参数具有默认值以允许您实例化 T<U>
.
为了支持这一点,你可以说你的模板模板参数应该至少一个使用可变模板的模板参数(typename...
):
template <typename T, template <typename, typename...> class Container = std::vector>
class MyArray : Container<T>
{
...
}