11
votes

Sauter un paramètre de modèle C ++

A c ++ hachap_map contient les paramètres de modèle suivants: xxx

Comment puis-je spécifier un allocator sans spécifier le hashcompare?

Ceci ne compilera pas: ( xxx


1 commentaires

C ++ ne définit pas de type hachas_map , préférez utiliser le code C ++ TR1 unomment_map à la place.


3 Réponses :


12
votes

La réponse simple est que vous ne pouvez pas. Vous ne pouvez pas sauter un paramètre de modèle et choisissez la valeur par défaut du modèle. Votre seule option consiste à déterminer la valeur par défaut et insérez-la dans votre déclaration.


1 commentaires

Bien que la solution simple ne fonctionne pas, il y a d'autres moyens de toujours y parvenir. Voir Richard's et ma réponse.



3
votes

Si le type de carte a un type de carte Typedef pour le paramètre de modèle HASHCompare , vous pouvez écrire une fonction méta qui utilise un type de carte de hachage de vanille pour obtenir le comparateur STD . Quelque chose comme ceci: xxx

Ceci dépend cependant de quelque chose comme le Hash_Map :: Key_Compare Être accessible.


0 commentaires

7
votes

Il y a une astuce que vous pouvez utiliser qui vous permettra au moins de vous sauver avoir à déterminer ce que la valeur par défaut est, mais nécessite que vous connaissiez le nom du type tel qu'il est défini dans hash_map code>.

Le hash_map sera probablement déclaré quelque chose comme: p> xxx pré>

Nous ne pouvons pas sortir de la valeur par défaut pour le hachage, mais nous pouvons nous référer à la valeur par défaut à l'aide du membre TYPEDEF: xxx pré>

Si vous allez utiliser le type de type beaucoup, créez une liste TYPEDEF: P>

typedef hash_map<EntityId,Entity*>::key_compare EntityKeyCompare;

hash_map<EntityId
  , Entity*
  , EntityKeyCompare
  , tbb::scalable_allocator> hm;


0 commentaires