C++ 使用容器模板的总类模板专门化

C++ 使用容器模板的总类模板专门化,c++,class,templates,containers,C++,Class,Templates,Containers,我试图创建一个不相交的集合类,该集合类使用模板为stl中的不同容器类型(vector、dequeue和array)工作,但由于数组容器的初始化不同于vector和dequeue,因此在对数组容器进行专门化时遇到了困难。数组接受两个参数,而其他两个接受一个参数。这就是我试图做的: template <int N,template<typename ,typename...>class Container> class disjoint_set{ private:

我试图创建一个不相交的集合类,该集合类使用模板为stl中的不同容器类型(vector、dequeue和array)工作,但由于数组容器的初始化不同于vector和dequeue,因此在对数组容器进行专门化时遇到了困难。数组接受两个参数,而其他两个接受一个参数。这就是我试图做的:

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;
.
.
.

模板
类不相交集合{
私人:
容器顶点;
容器根;
.
.
.
模板//数组的类专门化
类不相交集合{
私人:
容器顶点;
容器根;
.
.
.
我得到以下错误:
模板模板参数的模板参数必须是类模板或类型别名模板

这不起作用,因为在传递
int
时,模板模板参数容器声明有一个类型作为第二个参数。这可以很容易地解决:

template <int N, typename Container>
class disjoint_set{

template <int N> //Class specialization for array
class disjoint_set<N, std::array<int, N>>{
模板
类不相交集合{
模板//数组的类专门化
类不相交集合{

编译器给出错误,因为输入了一个类型作为模板参数。假设不需要对任何N进行专门化,并且它也可以用于其他不同格式的容器(vector和deque),正确的方法如下所示:

template <class Container> // template <typename Container>

class disjoint_set{

private:

    Container vertices;
    Container root;
.
.
.
};


祝你好运!

我张贴了一个答案。如果有帮助,请考虑投票/接受。template?@JaMiT将其用于不相交的_集构造函数,因为对于std::array,您必须为每个对象的参数传递值。这样我就可以在构造函数中使用N。不过,如果还有其他方法,我很想知道!@AGH97如果构造函数相关,那么这应该是问题的一部分。另外,我还以为您正在使用
std::array
仅在专门化中使用,而不是在更一般的模板中使用。@JaMiT我并不是仅在专门化中使用,我认为您不能在与std::vector或std::deque相同的模板中实现它,因为它在构造函数中需要一个额外的参数,所以我选择了专门化。代码最终看起来像这样,如果有更好的方法的话,lmk!谢谢你的回答,这一个还允许我使用N作为不相交的_集构造函数,这样我就可以有一个没有参数的构造函数!(使std::array专用化更容易)
disjoint_set<std::array<int, 56> > object1(...);
disjoint_set<std::vector<int> > object2(...);
disjoint_set<std::deque<int> > object3(...);