2011-04-21 2 views
2

Puis-je faire quelque chose commePassant modèle en tant que paramètre non spécialisé modèle

template<class Key, class Data, class Compare = less<Key>, template<typename T> class Allocator<T> = allocator<T> > 
    class mymap { 
     typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
     typedef vector<Data,Allocator<Data> > storageVector; 
} 

modèle est donc passé à la classe unspecialiazed et instancié plus tard.

Répondre

4

Oui, voici un exemple compilable minimal:

#include <map> 
#include <vector> 
using namespace std; 

template < 
    class Key, 
    class Data, 
    class Compare = less<Key>, 
    template <typename T> class Allocator = allocator 
> 
class mymap 
{ 
public: 
    typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
    typedef vector<Data,Allocator<Data> > storageVector; 
}; 

int main() 
{ 
    mymap<int,long>::storageMap m; 
    mymap<int,long>::storageVector v; 
    return 0; 
} 
+0

Merci pour l'aide! – akashihi

1

Oui, il est appelé un "paramètre modèle-modèle", et la syntaxe est

template <class Key, class Data, class Compare = less<Key>, 
      template <typename T> class Allocator = allocator > 
class mymap { 
    typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
    typedef vector<Data,Allocator<Data> > storageVector; 
} 
+0

'code'mymap.hpp (30) : erreur: l'identificateur "T" est indéfini template , class Compare = less , modèle class Allocator = allocateur > 'code' @mmutz bien, gcc n'est pas content avec une telle déclaration :) – akashihi

+2

@akashi: 's/= allocateur /= allocateur/ –

+0

ma faute, désolé Merci pour l'aide – akashihi

Questions connexes