Я читаю книгу Даоки Янга «C++ и объектно-ориентированные цифровые вычисления для ученых и инженеров». У него есть аналогичный пример того, что я показываю ниже, но исключения - это класс «P», который я определяю, а вторая - последняя строка (которая не работает). Мой вопрос: почему мой компилятор генерирует и ошибки, когда я предоставляю член функции f.integrand? Что я могу сделать, чтобы исправить это? Создаются ошибки: C3867, C2440 и C2973.Вопрос об использовании функции класса-члена в качестве параметра шаблона
Вот код:
class P{
public:
double integrand(double x){
return (exp(-x*x));
}
};
template<double F(double)>
double trapezoidal(double a, double b, int n)
{
double h=(b-a)/n;
double sum=F(a)*0.5;
for(int i=1;i<n;i++)
{
sum+=F(a+i*h);
}
sum+=F(b)*0.5;
return (sum*h);
}
double integrand2(double x){
return (exp(-x*x));
}
int main(){
P f;
cout<< trapezoidal<integrand2>(0,1,100)<<endl; // this works
cout<< trapezoidal<f.integrand>(0,1,100)<<endl; // this doesn't work
}
Отличный ответ. Я бы хотел его проголосовать, но у меня просто нет «репутации», чтобы это сделать. Это определенно вдохновило меня искать альтернативное решение. См. Ответ, который я написал ... – Pasta23