Я обновляю забытую концепцию о указателе на функцию для создания своего рода класса-обертки для обработки вызовов обратного вызова.О значении :: * по этому коду
После серфинга в гугле я нашел этот простой, но интересный пост 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 основной и глупый вопрос, так что будьте добры, пожалуйста.
С наилучшими пожеланиями
Это функция члена указателя –