указатель на функцию, возвращающий другой указатель на функцию в C ++ с локальностью

Учитывая тот факт, что указатель на функцию, возвращающую другой указатель на другую функцию, является механизмом, используемым в C для введения некоторого полиморфизма / обратных вызовов времени выполнения, каков эквивалентный способ реализовать это в C ++ при одновременном улучшении локальности и снижении затрат на указатели и косвенные ссылки ?

Например этот синтаксический сахар может помочь, но я не очень заинтересован в этом, хотя это хороший способ сделать что-то на языке C ++, а не на C-ish typedefМеня больше интересует улучшение локальности при попытке уменьшить использование явных указателей во время выполнения.

1

Решение

Реальная причина того, почему люди используют указатели функций в C для эмуляции полиморфизма, заключается не в производительности, а в том, что C не поддерживает ни реальный полиморфизм, ни шаблоны. Это две альтернативы у вас в C ++. Все три подхода сравниваются в эта тема.

Обратите внимание, что хотя вызов указателя функции не требует дополнительного поиска в vtable, как это делают вызовы виртуальных функций, вызов виртуальных функций и указателей функций страдают от одной и той же серьезной проблемы производительности: предсказание ветвлений в обоих случаях не так надежно, и вы склонны завершать с большим количеством промывок трубопровода.

3

Другие решения

Я думаю, что вы можете использовать виртуальную функцию для удовлетворения части требований.

0

По вопросам рекламы [email protected]