【发布时间】:2015-06-09 12:59:36
【问题描述】:
所以我有一个类的形式:
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,你试过template <typename T, template <typename T> class Container = std::vector<T>>吗? -
@DavidHaim 实际上这是可能的,这(我认为)不是问题的根源。不过,是的,我试过了。实际上我开始认为问题在于我必须解决 std::vector 的分配器模板参数。
-
另外,你最好在
template <typename T> class Container中使用不同于T的东西,clang 也会在这种情况下警告阴影。 -
@Predelnik 实际上使用
T是故意的,因为我希望它的模板参数与用户提到的第一个模板参数匹配。我希望这没有错,因为我前一阵子试过(不记得细节了)。 -
@TheQuantumPhysicist 你想要一些模板模板参数,它是一个没有指定模板参数的类模板,你稍后在
class MyArray : Container<T>中指定它们,你甚至可以删除那个 T 以避免混淆,它没有实际上很重要。
标签: c++ class templates template-templates