繁体   English   中英

将std容器传递给模板化类

[英]Passing a std container to a templated class

为什么不起作用?

template <typename T, typename U>  
class TSContainer {  
private:  
   U<T> container;  
};

称为:

TSContainer<int, std::vector> ts;

我认为解决方案可能是:

template <typename T, template <typename> typename C>  
class TSContainer  
{  
        C<T> container;  
};

但这也不起作用。

这是您需要的:

#include <vector>
template <typename T, template<typename, typename> class C>  
class TSContainer  
{  
    C<T, std::allocator<T> > container;  
};

int main() {
  TSContainer<int, std::vector> a;
}

注意, std::vector需要两个模板参数,第二个默认为std::allocator 或者,您可以编写:

#include <vector>
template <typename T, template<typename, typename = std::allocator<T> > class C>  
class TSContainer  
{  
        C<T> container;  
};

int main() {
  TSContainer<int, std::vector> a;
}

两者都迫使您选择分配器。 如果要控制向量使用哪个分配器(即用作C第二个模板参数的分配器),也可以使用以下方法:

#include <vector>
template <typename T, template<typename, typename> class C, typename A = std::allocator<T> >  
class TSContainer  
{  
        C<T, A> container;  
};

int main() {
  TSContainer<int, std::vector> a;
}

这是最灵活的解决方案。

简单地做类似的事情会不会容易得多:

#include <vector>
template <typename C>  
class TSContainer  
{  
    C container;  
};

int main() {
  TSContainer<std::vector<int> > a;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM