The*_*ist 2 c++ templates class template-templates
所以我有一个表格类:
template <typename T, template <typename T> class Container = std::vector>
class MyArray : Container<T>
{
...
}
Run Code Online (Sandbox Code Playgroud)
现在我试图将其实例化为
template <typename T>
class MyClass
{
MyArray<T> array;
}
Run Code Online (Sandbox Code Playgroud)
这产生了一个错误:
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;
Run Code Online (Sandbox Code Playgroud)
而它指向>的MyArray<T>.
这有什么不对?为什么我没有默认模板参数?
谢谢.
问题是std::vector需要两个模板参数:类型和分配器.许多其他容器类型将采用其他策略参数,这些参数具有允许您实例化的默认值T<U>.
为了支持这一点,您可以说模板模板参数应该使用可变参数模板()至少使用一个模板参数typename...:
template <typename T, template <typename, typename...> class Container = std::vector>
class MyArray : Container<T>
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |