Синтаксис для параметра шаблона шаблона по умолчанию - PullRequest
0 голосов
/ 01 февраля 2011

Я написал шаблонный класс sll (Single Linked List). Теперь я пытаюсь подключить к нему распределитель. У меня есть распределитель по умолчанию, распределитель и распределитель на основе пула 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. Любые предложения или указатели приветствуются.

1 Ответ

3 голосов
/ 01 февраля 2011

Вы должны написать:

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