gpt4 book ai didi

c++ - 默认模板模板参数的语法

转载 作者:行者123 更新时间:2023-11-28 01:08:35 25 4
gpt4 key购买 nike

我写了一个类似列表的模板类sll(Single Linked List)。现在,我正在尝试为其插入一个分配器。我有默认分配器 allocator 和基于池的分配器 pool_allocator。这些是在 STL 分配器接口(interface)之后设计的,但我需要添加分配器将处理的元素数(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 社区寻求帮助。任何建议或指示表示赞赏。

最佳答案

你必须写:

template<typename T, 
typename Allocator = allocator<T, Default_3> >
class sll { ... };

关于c++ - 默认模板模板参数的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com