Я написал шаблонный класс 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. Любые предложения или указатели приветствуются.