Исправление ox55ff, (текущая версия) :
Всё равно ничего не понял. Мне кажется ты перемудрил. Type erasure делается через std::function.
auto task = [/*захват состояния*/]() { /* любой код */ };
void process(const std::function<void()> &task)
{
task(); // Любой код можно вызвать не зная ничего о нём. Только функтор.
}
// Или даже так, чтобы было оптимальнее
template<typename T>
void process(T &&task)
{
task();
}
Но нужно понимать, что std::function жирные. Хотя я лучше бы на твоём месте излишни не теоретизировал, а попробовал написать. Может быть со скоростью будет всё в порядке даже с жирными фанкшинами.
delete (MyAlgorithmState*) state;
Не забывай про виртуальный деструктор в классе интерфейсе. А то нормально не удалит.
Исходная версия ox55ff, :
Всё равно ничего не понял. Мне кажется ты перемудрил. Type erasure делается через std::function.
auto task = [/*захват состояния*/]() { /* любой код */ };
void process(const std::function<void()> &task)
{
task(); // Любой код можно вызвать не зная ничего о нём. Только функтор.
}
// Или даже так, чтобы было оптимальнее
template<typename T>
void process(T &&task)
{
task();
}
delete (MyAlgorithmState*) state;
Не забывай про виртуальный деструктор в классе интерфейсе. А то нормально не удалит.