templated typedef?

Estou usando a libgc, um coletor de lixo para C e C ++. Para tornar os contêineres STL colecionáveis, é preciso usar o gc_allocato

Em vez de escrever

std::vector<MyType> 

um tem que escrever

std::vector<MyType,gc_allocator<MyType> >

Pode haver uma maneira de definir algo como

template<class T> typedef std::vector<T,gc_allocator<T> > gc_vector<T>;

Verifiquei há algum tempo e descobri que não era possível. Mas posso estar errado ou pode haver outra maneira de contornar.

Definir mapas desta maneira é particularmente desagradáve

std::map<Key,Val> 

torna-s

std::map<Key,Val, std::less<Key>, gc_allocator< std::pair<const Key, Val> > >

EDIT: Depois de tentar o uso da macro, descobri o seguinte código quebra-o:

#define gc_vector(T) std::vector<T, gc_allocator<T> >
typedef gc_vector( std::pair< int, float > ) MyVector;

A vírgula dentro da definição de tipo de modelo é interpretada como um separador de argumentos de macr

arece que a classe / estrutura interna é a melhor soluçã

Aqui está um exemplo de como isso será feito em C ++ 0X

// standard vector using my allocator
template<class T>
using gc_vector = std::vector<T, gc_allocator<T> >;

// allocates elements using My_alloc
gc_vector <double> fib = { 1, 2, 3, 5, 8, 13 };

// verbose and fib are of the same type
vector<int, gc_vector <int>> verbose = fib; 

questionAnswers(4)

yourAnswerToTheQuestion