:
template<typename T>
using VoidPMemberFn = void(T::*)();
template<typename T>
using DeferResultType = void (*)(const PID<T> &, VoidPMemberFn<T>);
template<typename T>
using DeferSignatureType = DeferResultType<T>(PID<T>, VoidPMemberFn<T>);
template<typename T>
_Defer<DeferSignatureType<T>> defer(const PID<T> &pid, VoidPMemberFn<T> method)
{
}
, _Defer :
void(* (PID<T>, void (T::*)(void)) )(const PID<T>&, void (T::*)(void))
^-+^-^ ^-------------------------^ ^-------------+------------------^
| argument list |
| |
+-----------------------------------------------+
return type: void(*)(const PID<T> &, void(T::*)(void))
"", , std::function (, std::function<int(float)>).
:
using sig = int(float);
sig gn;
int fn(float x)
{return (int)x;}
int main(int argc, char **argv)
{
sig *pfn = &fn;
return 0;
}
int gn(float x)
{return (int)(x*x);}