Константные указатели на функцииC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Константные указатели на функции

Сообщение Гость »


У меня возникли некоторые трудности с указателями на функции. У меня есть базовый класс, который определяет указатель на функцию, который через typedef double (*function)(double *x) const;
[*]
Быстрый дополнительный вопрос: почему приведенное выше определение типа не компилируется?

Выдает следующую ошибку: ошибка: функция «const» и «летучая» спецификаторы функции недопустимы в объявлении типа

Для приведенной ниже части я использую typedef double (*function)(double *x). Теперь каждый дочерний класс может реализовывать несколько разных версий функций этого типа. С помощью перечисления я выбираю функцию по своему выбору, которая устанавливает указатель моей функции, не являющейся членом (определенной в базовом классе), для инициализации одним из этих указателей на функцию-член дочернего класса. Вот фрагмент кода:

Исходный файл дочернего класса:

PndLmdROOTDataModel1D::PndLmdROOTDataModel1D(interpolation_type intpol_type) { если (intpol_type == КОНСТАНТА) { setModelFunction(&PndLmdROOTDataModel1D::evaluateConstant); } иначе, если (intpol_type == СПЛАЙН) { setModelFunction(&PndLmdROOTDataModel1D::evaluateSpline); } еще { setModelFunction(&PndLmdROOTDataModel1D::evaluateLinear); } } И базовый класс (заголовочный файл):

класс MultiModel1D: public Model1D { защищено: функция model_func; публика: МультиМодель1D(); виртуальный ~MultiModel1D(); void setModelFunction (функция f); } При компиляции я получаю следующую ошибку:

примечание: не известно преобразование аргумента 1 из double (PndLmdROOTDataModel1D::*)(double*)» на «функцию {она же double (*)(двойной*)}’

Я использую указатель на функцию из-за проблем со скоростью (по крайней мере, я думаю, что это должно быть быстрее, чем постоянно выполнять какой-то переключатель). Что я делаю не так? Возможно, есть какой-то шаблон проектирования, который послужит лучшей альтернативой... Заранее спасибо!

Стив
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»