Сохранение указателя функции + аргументы для последующего использования

У меня проблема, когда сохраняется указатель на функцию C ++, вместе с набором аргументов для его вызова, чтобы его можно было вызвать позже. Вызывающий код не знает типа и аргументов функций. Сохранение и вызов указателей и аргументов функций в моем приложении чрезвычайно важны для производительности. Интерфейс должен выглядеть примерно так:

void func( int a, char * b );
call_this_later( func, 5, "abc" );

Простое решение - поместить всю эту информацию в функтор, требуя другого typedef для каждой вызываемой функции. C ++ 11 позволяет мне делать это с помощью вариативного шаблона, так что это нормально.

Поскольку тип функтора неизвестен в момент вызова, кажется необходимым создать виртуальный базовый класс для этих функторов и вызывать функторы с помощью вызовов виртуальных функций. Накладные расходы на производительность вызовов виртуальных функций + выделение кучи слишком высоки (я расширяю границы реализации этой идиомы, используя как можно меньше инструкций по сборке). Так что мне нужно другое решение.

Есть идеи?

7
задан Xeo 19 December 2011 в 02:11
поделиться