C++ carte avec différents types de données en tant que valeurs

mon problème est le suivant: je veux mettre les deux (pas plus) les différents types de données en tant que valeurs sur une carte.

typeX A, B, ...;
typeY Z, Y, ...;

void func (typeX) { ... }

void func (typeY) { ... }


std::map <std::string, what_to_put_here?? >map;
map["a"] = A;
map["z"] = Z;
...

std::vector<std::string> list;
//this list will be sth. like "a", "y", ...

for (unsigned int i = 0; i < list.size(); ++i)
    func( map[list[i]] )

Évidemment, cela ne fonctionne pas comme la carte ne pourra accepter qu'un type de données de valeur. Si la boucle sur la "liste", l'appel à "func" doit être sans équivoque puisque le type de carte[liste[i]] est connue.

Je veux éviter explicite du moulage ou de la vérification de type, c'est à dire qqch comme

    if (typeid( map[list[i]] ).name() == "typeX")
        func( map[list[i]] )
    else if (typeid( map[list[i]] ).name() == "typeY")
        func( map[list[i]] )

Pouvez-vous me dire si cela est possible? Encore une fois, elle sera limitée à seulement deux types de données différents. Merci!

Je voudrais faire une classe wrapper avec deux variables de membre et de l'utiliser dans la carte de la déclaration.
boost::variant pourrait aider.
Avez-vous envisagé de faire typeX et typeY sous-classes d'une classe de base commune?

OriginalL'auteur user3240855 | 2014-01-27