【发布时间】:2019-05-24 19:56:43
【问题描述】:
我正在尝试使用模板创建一个不相交的集合类,该类适用于 stl 中的不同容器类型(向量、出队和数组),但我无法对数组容器进行专门化,因为它具有不同的初始化比向量和出队。数组接受两个参数,而另外两个接受一个。这是我试图做的:
template <int N,template<typename ,typename...>class Container>
class disjoint_set{
private:
Container<int> vertices;
Container<int> root;
.
.
.
template <int N> //Class specialization for array
class disjoint_set<N,std::array<int,N>>{
private:
Container<int> vertices;
Container<int> root;
.
.
.
我收到以下错误: 模板参数的模板参数必须是类模板或类型别名模板
【问题讨论】:
-
我发布了一个答案。如果有帮助,请考虑投票/接受。
-
第一个(更通用的)模板的
N参数的目的是什么? -
@JaMiT 将它用于 disjoint_set 构造函数,因为对于 std::array 您必须为每个对象的参数传递值。这样我就可以在构造函数中使用 N 。如果有另一种方式,我很想知道!
-
@AGH97 如果构造函数是相关的,那么它应该是问题的一部分。另外,我以为您只在专业化中使用
std::array,而不是在更通用的模板中。 -
@JaMiT 这不是我只在专业化中使用我不认为你可以在与 std::vector 或 std::deque 相同的模板中实现它,因为它需要额外的其构造函数
中的参数,所以我选择了专门化它。代码最终看起来像这样pastebin.com/kwumFprp,如果有更好的方法可以做到这一点!
标签: c++ class templates containers