Есть несколько вещей, которые составляют тип указателя на функцию.
Если эти функции не одинаковы для всех указателей на функциитогда вы не сможете разумно хранить их в одном и том же контейнере.
Однако вы можете связать различные аспекты в std::function
, который является вызываемым объектом, который требует только подписи аргумента и возврататип должен быть единообразным.
Возможно, пришло время переосмыслить проблему с точки зрения виртуальных функций.Имеет ли эта путаница указателей на функции целостный интерфейс, который вы можете выразить?Если нет, то вы все равно обречены: -)
RE: Hasturkun, вы можете хранить гетерогенные указатели функций в объединениях, да, это просто POD, но вам также нужно будет хранить информацию о том, какого типауказатель это так, что вы можете выбрать правильный член для вызова.С этим связаны две проблемы:
- есть накладные расходы на элемент,
- , вам нужно вручную проверять, что вы постоянно используете правильный вариант, это бремяс нелокальными эффектами - это распространяющийся яд.
Намного лучше иметь один контейнер для каждого типа, это прояснит код и сделает его более безопасным.Или используйте прокси, например std::function
, чтобы все они имели одинаковый тип.