Mapa C ++ com diferentes tipos de dados como valores

meu problema é o seguinte: quero colocar dois (não mais) tipos de dados diferentes como valores em um mapa.

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]] )

Obviamente, isso não funciona, pois o mapa aceitará apenas um tipo de dado de valor. Ao fazer um loop sobre a "lista", a chamada para "func" deve ser inequívoca, pois o tipo de mapa [list [i]] é conhecido.

Quero evitar a transmissão explícita ou a digitação, ou seja, sth como

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

Você pode me dizer se isso é possível? Novamente, ele será limitado a apenas dois tipos de dados diferentes. Obrigado!

questionAnswers(6)

yourAnswerToTheQuestion