下面简化的类是Chunk<T>
的容器。
template <typename T, template <typename> class C = Chunk>
class ChunksManager
{
C<T> *m_origin;
// ...
}
第二个模板参数的要点是指定Chunk
的继承版本。
现在,如果我想在InheritedChunk
方法中调用Chunk
的非继承方法(通过方法指针),我需要InheritedChunk
类型。
这导致我写这个:
C<T, C<T> > *m_origin;
这里的问题是我不能无休止地指定第二个模板参数。我的想法是它可以使用Chunk
的第二个参数的默认值...
template <typename T, typename C>
class Chunk;
template <typename T, typename C = Chunk<T> >
class Chunk
...但缺少默认值的第二个参数(如果我指定C则不会声明)。
当我尝试使用模板模板参数时遇到同样的问题:
// recursive argument here
// v
template <typename T, template <typename> class C>
class Chunk
有没有办法解决这个问题?