我编写了一个类似列表的模板类sll(单链接列表)。现在,我正在尝试插入一个分配器。我有默认的分配器,分配器和基于池的分配器pool_allocator。这些是在STL分配器接口之后设计的,但我需要添加分配器将处理的元素数(max_size)作为模板参数。所以,我做了以下几点。
enum {Default_1 = 16}; // for example
template <typename T, size_t N = Default_1>
struct allocator {
};
enum {Default_2 = 32}; // for example
template <typename T, size_t N = Default_2>
struct pool_allocator {
};
如果客户使用,我想支持两种:
1. sll<int> == implying ==> sll<int, allocator<int, Default_1> >
2. sll<int, pool_allocator<int, 4096> >
我遇到的困难是在sll模板类中指定默认分配器。最初我有
template<typename T, typename Allocator = allocator<T> > class sll { ...};
它有效,但问题是,用户可以指定分配器的容量。
我试过
template<typename T,
typename Allocator = allocator< typename T, size_t N = Default_3> >
class sll { ... };
但我收到错误:
error: template argument 1 is invalid
我尝试了很少的其他组合,但都没有奏效。在这一点上,我没有想法,并寻求SO社区的帮助。任何建议或指示都表示赞赏。
答案 0 :(得分:3)
你必须写:
template<typename T,
typename Allocator = allocator<T, Default_3> >
class sll { ... };