Функция рассчета определенного интеграла. (Передача функции как аргумента)

6ex

Есть функция пределенная как:
float integrall(float (*argFunc)(float x) , float argTmin, float argTmax, float argStep=1)
Если ей в качестве аргумента передать функцию, которая является членом какого-либо класса,
integrall(pSubs->pArCpList[0]->getCp, 100,1000);
то компилятор выдает ошибку: ошибка: аргумент типа ‘float (ThermalCap:: )(float)’ не соответствует типу ‘float (*)(float)’Однако если передать глобальную функцию
integrall(y, 100,1000);
- всё ОК.Не подскажите что с этим можно сделать?PS: OS - Slackware 12.2 Компилятор: gcc
4 ответа

6ex

попробуй так
...
#include<functional>
...
   integrall(std::mem_fun(&ThermalCap::getCp), 100,1000);
...


6ex

попробуй так
...
#include<functional>
...
   integrall(std::mem_fun(&ThermalCap::getCp), 100,1000);
...
В данном случае ведь не указывается объект класса, которому принадлежит эта функция...


6ex

Хм,ну думаю ты никак не сможешь передать указатель на функцию-член какого-нибудь класса,и чтоб функция сама определила из какого именно объекта она вызывается! Так что тебе придется в функцию передавать еще и указатель на объект класса.


6ex

Есть решение! Всем спасибо!Объявление:
template <class classX> float integrall(classX *argClassObj,float (classX::*argFunc)(float x) , float argTmin, float argTmax, float argStep=1){
...
(argClassObj->*argFunc)((curT+nextT)/2)*(nextT-curT);
...
}
Вызов:
integrall(pSubs->pArCpList[0], &ThermalCap::getCp, 100,1000);