2011-01-22 2 views
0

Visual Studio borks lorsque j'essaie de créer un std :: map avec le type de valeur étant un pointeur vers template-functor. Est-ce que je fais quelque chose d'illégal ici?Pourquoi Map avec un pointeur sur le foncteur de modèle comme valeur_type ne fonctionne-t-il pas?

// Functor prototype 
template< class T, class evenT> 
class FunctionHandler {}; 

// std::Map definition 
template <class T, class evenT> 
map<int, FunctionHandler<T, evenT>* > lookup; 

Quelqu'un peut-il s'il vous plaît me dire si cela est une erreur (et pourquoi est-ce mal) ou est-ce juste Visual Studio?

Répondre

3

Le problème est que vous ne pouvez pas avoir un "modèle variable". Cela n'a aucun sens.

Vous devez créer une variable avec un type spécifique (c.-à-valeurs spécifiques pour T et evenT), ou faire quelque chose comme:

template <class T, class evenT> 
class SomeClass 
{ 
    map<int, FunctionHandler<T, evenT>* > lookup; 
}; 
+0

Je ne sais pas si je comprends tout à fait le terme « modèle variable » . Quand T et evenT sont définis, FunctionHandler * représenterait un type concret ... alors ça devrait marcher alors? – brainydexter

+0

"modèle variable" comme "modèle de fonction" ou "modèle de classe". Ce n'est pas un concept valide en C++, pas moins parce que cela ne servirait à rien! Si 'T' et' evenT' sont des types définis, alors vous devriez pouvoir supprimer en toute sécurité le 'template <...>' avant la définition de 'lookup', et tout devrait être compilé. –

+0

Ah, merci d'avoir éclairci ça. Cela a plus de sens maintenant. Eh bien, je suis coincé avec ce problème, et je ne connais pas un bon moyen de gérer cela. Peut-être, vous pouvez suggérer une meilleure façon de faire face à cela. La carte dans ce cas représente un . Cela ne fonctionne évidemment pas pour la raison que vous avez mentionnée. La façon dont je l'ai fait fonctionner pour l'instant est: Map :: et FunctionHandler hérite de FunctionBase avec une fonction virtuelle. Mais ceci introduit une entrée virtuelle inutile. Alors, quel serait un bon moyen de faire face à cette situation? – brainydexter

Questions connexes