2013-07-01 6 views
0

Я нашел что-то о своей проблеме, но я не очень хорошо понимаю. Мне нужно сделать что-то вроде этого:Как передать функцию-член функции, используемой в другой функции-члене?

class T 
{ 
    double a; 
public: 
    double b; 
    void setT(double par) 
    { 
     a = par; 
    } 

    double funct(double par1) 
    { 
     return par1/a; 
    } 

    void exec() 
    { 
     b = extfunct(funct, 10); 
    } 
}; 

double extfunct(double (*f)(double),double par2) 
{ 
    return f(par2)+5; 
} 

Эксплуатация и функционирование только, например, структура. Причиной этой структуры является то, что у меня есть предварительно построенный класс, который находит минимум функции gived (в этом примере он не используется). Поэтому я должен использовать его в члене функции класса. Я понял разницу между указателем на функцию и указателем на функцию-член, но я не понимаю, как ее записать. Спасибо, и извините за плохое объяснение проблемы.

+0

Редактировать свой вопрос dont добавить информацию в комментарий – Borgleader

+0

Случайный день с запятой лотереи ... –

+0

@Borgleader Да, сэр! –

ответ

1

Используйте указатель на функцию-член:

struct Foo 
{ 
    void f(int, int) {} 
    void g(int, int) {} 

    void execute((Foo::*ptmf)(int, int), int a, int b) 
    { 
     // invoke 
     (this->*ptmf)(a, b); 
    } 
}; 

Использование:

Foo x; 
x.execute(&Foo::f, 1, 2); // calls x.f(1, 2) 
x.execute(&Foo::g, 2, 1); // calls x.g(2, 1) 

Эти указатели работают, как и ожидалось с виртуальными функциями.

+0

Есть вещь, которую я не понимаю. В Usage вы определяете Foo x; но я должен использовать его в члене внутри класса, в функции exec(). Как я могу это сделать. –

+0

@TommasoFerrari: Это все в '(this -> * ptmf)'. '-> *' является оператором. Вы можете вызвать функцию-член на * любом * экземпляре; Я просто выбрал это для этого примера. –

+0

Извините, но я не понимаю. Моя функция 'extfunct' в качестве выходного двойника, я не могу точно узнать, как может быть моя функция extfunct и другой exec. Еще раз, я пытаюсь понять. –