私はリストのようなテンプレートクラス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コミュニティからの助けを求めています。任意の提案やポインタが評価されます。
1:ありがとうございます。それはシンプルですが、私は最も単純なオプションを見落としました:-(後ろの質問は次のとおりです:sllクラステンプレートの中で、アロケータの2番目のテンプレート引数にアクセスするにはどうすればいいですか?(大文字のAをメモしてください) – Arun
例えば 'enum {size = ...;}'のように 'allocator 'クラスを使うことができるので、' Allocator :: size'としてアクセスすることができますが、すべてのallocator内で 'size'定数を定義する必要があります。 –
ありがとう、私は静的constアプローチについても考えました。 – Arun