У меня есть некоторые трудности с указателями функций. У меня есть базовый класс, который определяет указатель функции, который через typedef double (* function) (double * x) const;указатели функции const
Беглый сторона вопрос: почему выше ЬурейеЕ не компилировать?
дает следующее сообщение об ошибке: об ошибке: «Const» и «летучих» функции спецификаторов на «функцию» недействительной в объявлении типа
Для части ниже я использую ЬурейиЙ двойную (* функцию) (двойной * x). Теперь каждый дочерний класс может реализовывать множество и разные версии функций этого типа. Через enum я выбираю функцию по своему выбору, которая устанавливает мой указатель на не-член (определенный в базовом классе), который должен быть инициализирован одним из этих указателей-членов дочернего класса. Вот фрагмент кода:
Исходный файл класса дочери:
PndLmdROOTDataModel1D::PndLmdROOTDataModel1D(interpolation_type intpol_type) {
if(intpol_type == CONSTANT) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateConstant);
}
else if (intpol_type == SPLINE) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateSpline);
}
else {
setModelFunction(&PndLmdROOTDataModel1D::evaluateLinear);
}
}
И базового класса (заголовочный файл):
class MultiModel1D: public Model1D {
protected:
function model_func;
public:
MultiModel1D();
virtual ~MultiModel1D();
void setModelFunction(function f);
}
При компиляции я получаю следующее сообщение об ошибке:
note: no known conversion for argument 1 from ‘double (PndLmdROOTDataModel1D::*)(double*)’ to ‘function {aka double (*)(double*)}’
Я использую указатель на функцию из-за проблем с производительностью (по крайней мере, я думаю, это должно быть f астра, чем постоянно работает через какой-либо коммутатор). Что я делаю не так? Возможно, есть и некоторые шаблоны дизайна, которые будут служить лучшей альтернативой ... Спасибо заранее!
Стив
Возможный дубликат [указатель на функцию члена-члена typedef] (http://stackoverflow.com/questions/3050805/pointer-to-const-member-function-typedef) –
Нижняя ошибка говорит все. Указатели функций не совпадают с указателями функций-членов. http://liveworkspace.org/code/1iUxos%242 – chris
Обычная функция не может быть const ?? – yngccc