2011-01-31 2 views
0

나는 list-like 템플릿 클래스 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 { ...}; 

그것은 작동하지만 문제가 있었다, 사용자는 수 t은 할당의 용량을 지정합니다.

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

을 시도하지만 오류가 나타납니다 내가 몇 가지 다른 조합을 시도

error: template argument 1 is invalid 

을하지만, 그들 중 누구도 일했다. 이 시점에서 나는 아이디어가 부족하고 SO 커뮤니티에서 도움을 찾고 있습니다. 어떤 제안이나 조언을 부탁드립니다.

답변

3

당신은 쓸 필요가 :

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

+1 : 감사합니다. 그건 간단했다, 나는 가장 간단한 옵션을 간과했다 :-(:(의) : 다음 질문은 : 내부 sll 클래스 템플릿, 어떻게 할당 자의 두 번째 템플릿 인수 (대문자 A 참고)에 액세스합니까? – Arun

+0

정적 상수를 정의 할 수 있습니다. allocator 클래스, 예를 들어'enum {size = ...;}'와 같이 사용하면 Allocator :: size로 액세스 할 수 있지만 모든 allocator 내에'size' 상수를 정의해야합니다. –

+0

감사합니다. 정적 const 접근 방식에 대해서도 생각했습니다. – Arun