2016-10-14 2 views
2

Я обновляю забытую концепцию о указателе на функцию для создания своего рода класса-обертки для обработки вызовов обратного вызова.О значении :: * по этому коду

После серфинга в гугле я нашел этот простой, но интересный пост http://blog.coldflake.com/posts/C++-delegates-on-steroids/

До сих пор я понимаю почти все, кроме этого

T::*TMethod 

я помню смысл :: *, вы можете увидеть, что во многих частях сообщения, здесь используется впервые

class Delegate 
{ 
    typedef void (*Type)(void* callee, int); 
public: 
    Delegate(void* callee, Type function) 
     : fpCallee(callee) 
     , fpCallbackFunction(function) {} 
    template <class T, void (T::*TMethod)(int)> <<<<<<First time 
    static Delegate from_function(T* callee) 
    { 
     Delegate d(callee, &methodCaller<T, TMethod>); 
     return d; 
    } 
    void operator()(int x) const 
    { 
     return (*fpCallbackFunction)(fpCallee, x); 
    } 
private: 
    void* fpCallee; 
    Type fpCallbackFunction; 
    template <class T, void (T::*TMethod)(int)> 
    static void methodCaller(void* callee, int x) 
    { 
     T* p = static_cast<T*>(callee); 
     return (p->*TMethod)(x); 
    } 
}; 

До сих пор я не понимал, как я t, но я не могу вспомнить значение :: *

Я знаю, что propablythisisavery основной и глупый вопрос, так что будьте добры, пожалуйста.

С наилучшими пожеланиями

+0

Это функция члена указателя –

ответ

2

Ее функция указатель на функцию-член класса T.

Простой пример:

class A { 
    int func() { return 1; } 
public: 
    int (A::*pf)(); 

    A() : pf(&A::func) {} 
}; 

int main() { 
    A obj; 
    std::cout << (obj.*obj.pf)(); 
    return 0; 
} 
+0

Привет, ребята, спасибо за ответ, я читаю предложенный пост, чтобы рассмотреть некоторые понятия, еще раз спасибо за помощь – Trungus

Смежные вопросы