0

リストのようなテンプレートクラス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 {
};

クライアントが使用する場合は、次の2種類をサポートしたいと思います。

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コミュニティからの助けを求めています。任意の提案やポインタをいただければ幸いです。

4

1 に答える 1

3

あなたは書く必要があります:

template<typename T, 
    typename Allocator = allocator<T, Default_3> >
class sll { ... };
于 2011-01-31T22:59:28.857 に答える