Оценка указателя динамической функции другого класса без шаблонов

У меня есть класс, который автоматически интерполирует 2D-функцию (вполне доволен этим). Он принимает динамический указатель на функцию для интерполируемого метода. Мне пришлось шаблонизировать класс, так как мне нужен экземпляр объекта, а также указатель.

Могу ли я избежать шаблонного урока? Или мне нужно будет продолжать делать это, чтобы принять экземпляр объекта в качестве параметра? Возможен ли базовый класс? (Я довольно новичок в C++)

То, как у меня это (сокращенно):

template<class F>
class Interpolate {
   Interpolate(double (F::*f)(double, double), F & obj, ...) { 
      ...
      double value = (object.*f)(x,y);
      ...
   }
}

1 ответ

Решение

Как указано в комментарии, вы также можете использовать std::function. Это даст вам больше гибкости с помощью std::bind. С другой стороны, std::function может разместить результирующую функцию в куче, и это вызывает большие издержки (чего можно избежать, используя std::cref()). Очень интересное обсуждение различий во времени выполнения шаблонов std:: function и шаблонов можно найти в std:: function vs template.

"Обратите внимание, что std:: function может хранить различные типы вызываемых объектов. Следовательно, он должен выполнять некоторую магию стирания типов для хранилища. Как правило, это подразумевает динамическое выделение памяти (по умолчанию через вызов new). Общеизвестно, что это довольно дорогостоящая операция. "Кассио Нери - Здесь может помочь std:: cref, особенно потому, что в примере, который мы только что написали по ссылке, без std:: cref, выделение кучи std:: функция замедлила программу в 10 раз!

Другие вопросы по тегам