Дело в том, что когда вы вызываете свои функции, вы уже знаете, какого типа они будут.
Если мы сделаем что-то вроде
int x = map["key"](1, "2")
мы уже можем сделать вывод, что любая функция, хранящаяся в «ключе», имеет тип (int (*)(int, char*))
, поэтому мы могли бы сделать что-то вроде
int x = map_of_int_and_string_to_int["key"](1, "2");
и избегайте всех хлопот, связанных со слиянием всех ключей ... Хотя это правда, что C ++ имеет некоторые функции перегрузки именно для такого рода вещей, я не могу понять, почему вы должны беспокоиться в этом конкретном случае.
И в конце концов, почему вы хотите разместить все эти функции на одной карте? Они не имеют общих интерфейсов, поэтому вы не можете получить к ним одинаковый доступ, вы не можете перебирать их и непрозрачно передавать их кому-то еще. Без чего-либо общего вы ничего не можете сделать безопасно с функциями этой гипотетической карты.