Тип метода класса

Я пишу код с использованием библиотеки числовых рецептов, и я хотел бы свести к минимуму функцию, которая на самом деле является методом класса. У меня есть этот тип кода:

class cl{
  Doub instance(VecDoub_I &x)
  {
    return x[0]*x[0] + x[1]*x[1];
  };
};

И я хочу минимизировать эту функцию с помощью метода Пауэлла, в следующем коде

// enter code here
int main(void)
{
  cl test;
  Powell<Doub (VecDoub_I &)> powell(test.instance);
}

Но когда я компилирую, я получаю следующую ошибку:

main.cpp:241:22: error: invalid use of member function (did you forget the ‘()’ ?)
main.cpp:242:54: error: no matching function for call to ‘Powell<double(const NRvector<double>&)>::Powell(<unresolved overloaded function type>)’

Кто-нибудь уже сталкивался с этой проблемой? заранее спасибо

1 ответ

Поскольку cl::instance это метод экземпляра (т.е. не статический метод), он требует this указатель. Поэтому вы не можете захватить указатель на него в обычном указателе функции. Кроме того, чтобы получить адрес функции, вы должны использовать & оператор.

Я не знаком с библиотекой, которую вы используете, но я думаю, что изменение функции на static (или сделать его бесплатной функцией) и добавить & должно помочь

Powell<Doub (VecDoub_I &)> powell(&cl::instance);
Другие вопросы по тегам