2

所以我有一个形式的类:

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>

这有什么问题?为什么我不能有默认模板参数?

谢谢。

4

1 回答 1

6

问题是它std::vector需要两个模板参数:类型和分配器。许多其他容器类型将采用额外的策略参数,这些参数具有默认值以允许您实例化T<U>.

为了支持这一点,您可以说您的模板模板参数应该使用可变参数模板( )至少typename...采用一个模板参数:

template <typename T, template <typename, typename...> class Container = std::vector>
class MyArray : Container<T>
{
    ...
}
于 2015-06-09T13:08:22.467 回答