Я пытаюсь передать метод класса другому методу класса с использованием шаблона и не могу найти ответа о том, как это сделать (нет C++ 11, boost ok) :C++ метод передачи класса в качестве аргумента метода класса с шаблонами
Я упростил задачу ядра до:
class Numerical_Integrator : public Generic Integrator{
template <class T>
void integrate(void (T::*f)()){
// f(); //already without calling f() i get error
}
}
class Behavior{
void toto(){};
void evolution(){
Numerical_Integrator my_integrator;
my_integrator->integrate(this->toto};
}
я получаю как ошибку:
error: no matching function for call to ‘Numerical_Integrator::integrate(<unresolved overloaded function type>)’this->toto);
note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘void (Behavior::*)()’
Спасибо.
Бонус: Как насчет аргументов?
class Numerical_Integrator{
template <class T, class Args>
double integrate(void (T::*f)(), double a, Args arg){
f(a, arg);
}
}
class Behavior{
double toto(double a, Foo foo){ return something to do};
void evolution(){
Foo foo;
Numerical_Integrator my_integrator;
my_integrator->integrate(this->toto, 5, foo};
}
[Функция ускорения] (http://www.boost.org/doc/libs/1_61_0/doc/html/function.html) и [Boost bind] (http://www.boost.org/doc/ ЛИЭС/1_61_0/ЛИЭС/привязывать/DOC/HTML/bind.html)? Или взгляните на [стандартную библиотеку алгоритмов] (http://en.cppreference.com/w/cpp/algorithm) и посмотрите, как они обрабатывают «предикаты»? –
Для чего вам нужен T? Проверка? – thorsan
'f (a, arg);' <- вам также нужен объект, который будет действовать как 'this' в функцию. – coyotte508