A c ++ hachap_map contient les paramètres de modèle suivants: Comment puis-je spécifier un allocator sans spécifier le hashcompare? p> Ceci ne compilera pas: ( p>
3 Réponses :
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. p>
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.
Si le type de carte a un type de carte code> Typedef code> pour le paramètre de modèle code> HASHCompare code>, 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: Ceci dépend cependant de quelque chose comme le Hash_Map
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 Le hash_map sera probablement déclaré quelque chose comme: p> 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: Si vous allez utiliser le type de type beaucoup, créez une liste TYPEDEF: P> hash_map code>. typedef hash_map<EntityId,Entity*>::key_compare EntityKeyCompare;
hash_map<EntityId
, Entity*
, EntityKeyCompare
, tbb::scalable_allocator> hm;
C ++ ne définit pas de type
hachas_map code>, préférez utiliser le code C ++ TR1unomment_map code> à la place.