The answer to your question:
bool(C::*)(Foo&)
However, this will not help you, since you cannot store the template variable in an instance of the class:
template<class C>
bool (C::*callbackFunc)(Foo&);
This is not a legal variable declaration, and you really cannot fix it.
Replace callbackFuncwith
std::function< bool(void*, Foo&) > callbackFunc;
Then in Examplector write a function that converts the ptr member to such a function. It includes static cast from void*to C*.
Get func return functions:
std::function< bool(C*, Foo&) >
- - callbackFunc.
, C* in Foo&.