【发布时间】:2015-04-28 10:39:07
【问题描述】:
我有这个模板
template <typename T, size_t maxsiz = 6>
class Array;
我有这个适配器模板
template <typename T, template <typename> class Container = std::vector>
class Stack;
我想要做的是像这样使用带有堆栈的数组
Stack<int, Array> s;
但是,Array 的默认构造函数不能满足 Stack 的要求,所以我需要专门为 Array 设置 Stack。
理想情况下,我只想专门化 Stack<T, Array> 的 ctor,这样我就可以在初始化时为内部 Array 成员提供正确的参数。
我试过了
template <typename T>
class Stack<T, Array>::Stack() : container(0) { } // container is the name of the wrapped Container
然而,它有问题。首先,它不会编译(是的......),其次,我希望能够给数组一个不同的大小,像这样
Stack<int, Array<int, 13>> stack;
或任何功能等效的东西(数组大小的编译时间常数)。如何做到这一点?
更新
所以我做了更多的挖掘,显然如果没有整个类的相应部分特化,你就不能部分特化成员函数。这就解释了为什么我的尝试行不通。
【问题讨论】: