MemberFunctionPointer
- это переменная не типа (или константа времени компиляции) , поэтому ее нельзя использовать, вам нужна настоящая сигнатура этой функции, что-то вроде этого может быть лучше ..
template<typename T_FUNC_PTR, class T_CLASS>
inline static void Example(T_FUNC_PTR fPtr, T_CLASS* InstancePointer)
{
SomeClass<T_CLASS>::Bind<T_FUNC_PTR>(fPtr, InstancePointer);
}
т.е. позволить компилятору определить тип указателя функции (ПРИМЕЧАНИЕ: вам также придется распространять указатель на функцию), чтобы вызвать
Example(&foo::bar, foo_inst);
Это не проверенои от макушки головы, так что синтаксис может быть немного неправильным ...
РЕДАКТИРОВАТЬ: вот более простой пример, чтобы продемонстрировать концепцию:
#include <iostream>
struct foo
{
void bar() { std::cout << "foo::bar()" << std::endl; }
};
template<typename T_FUNC_PTR, typename T_CLASS>
void exec(T_FUNC_PTR ptr, T_CLASS& inst)
{
(inst.*ptr)();
}
int main(void)
{
foo inst;
exec(&foo::bar, inst);
}