У меня есть код C ++, и мне действительно нужно использовать функцию C:
int procedure(... , S_fp fun , ...)
где fun - указатель на функцию, сигнатура которой должна быть такой:
int fun(double* , double* , double)
Функция, указатель на которую я хочу использовать, является членом шаблона класса:
template<int nPar> class PenaltyAlgorithm
{
public:
...
int Calculate(double* param, double* val, double prec)
{
...
}
...
}
Как видите, ее подпись в порядке.Но когда я делаю это: процедура (... & PenaltyAlgorithm :: Calculate, ...);
Я получаю ошибку:
error: cannot convert ‘int (PenaltyAlgorithm<30>::*)(double*, double*, double)’ to ‘int (*)(...)’ for argument ...
Пожалуйста, помогите.Если вам нужна дополнительная информация, пожалуйста, напишите.
Спасибо !!!
Прочитав ответы, я понял, что важно добавить информацию о классе:
template<int nPar> class PenaltyAlgorithm
{
public:
int Calculate(double* param, double* val, double prec)
{
*val = comp_fun->Compute(param);
}
double* RunAlgorithm()
{
...
procedure(... &PenaltyAlgorithm<nPar>::Calculate, ...);
...
}
...
private:
...
CompositeFunction<nPar>* comp_fun;
}
1).Я не могу использовать статическое веселье, потому что этому веселью нужно получить доступ к членам класса;
2).Можем ли мы использовать тот факт, что мы вызываем «процедуру» от забавного члена класса?