برای تعریف فانکشن پوینتر غیر static عضو کلاس به این شکل باید عمل کرد :
returnType(ClassName::*newFunctionName)(InputTypes)
اگر static باشه مثل تعریف function pointer تابع معمولی هستش :
returnType(*newFunctionName)(InputTypes)
مثال برای ارسال تابع عضو به یک تابع دیگه :
#include <iostream>
#include <string>
class Foo
{
public:
void memberFunction(char ch){
std::cout<<ch<<'\n';
}
static void staticMemberFunc(int a,std::string b){
std::cout<<a<<b<<'\n';
}
};
//accept non-static member function
void func(void (Foo::*newFunctionName)(char) )
{
Foo foo;
(foo.*newFunctionName)('a');
}
//accept non-static member function and ordinary functions
void func2(void(*newFunctionName)(int,std::string))
{
newFunctionName(5,"test");
}
int main()
{
func(&Foo::memberFunction);
func2(&Foo::staticMemberFunc);
}
از template هم میشه استفاده کرد :
template<class T>
void func(T newFunctionName)
{
Foo foo;
(foo.*newFunctionName)('a');
}