Указатель на функцию, возвращающий другой указатель на функцию в C++ с локальностью
Учитывая тот факт, что указатель на функцию, возвращающую другой указатель на другую функцию, является механизмом, используемым в C для введения некоторого полиморфизма / обратных вызовов времени выполнения, каков эквивалентный способ реализовать это в C++ при одновременном улучшении локальности и снижении затрат на указатели и косвенные ссылки?
Например, этот синтаксический сахар может помочь, но меня это не особо интересует, хотя это хороший способ сделать что-то на языке C++ вместо более простого C-ish typedef
Я больше заинтересован в улучшении локальности при попытке сократить использование явных указателей во время выполнения.
2 ответа
Реальная причина того, почему люди используют указатели функций в C для эмуляции полиморфизма, заключается не в производительности, а в том, что C не поддерживает ни реальный полиморфизм, ни шаблоны. Это две альтернативы у вас в C++. Все три подхода сравниваются в этой теме.
Обратите внимание, что хотя вызов указателя функции не требует дополнительного поиска в vtable, как это делают вызовы виртуальных функций, вызов виртуальных функций и указателей функций страдают от одной и той же серьезной проблемы производительности: предсказание ветвлений в обоих случаях не столь надежно, и вы склонны завершать с большим количеством промывок трубопровода.
Я думаю, что вы можете использовать виртуальную функцию для удовлетворения части требований.