可调用对象的定义:
- 是一个函数指针;
- 是一个具有operator()成员函数的类对象(仿函数);
- 是一个可被转换为函数指针的对象;
- 是一个类成员(函数)指针;
void func(void)
{
std::cout << __FUNCTION__ << std::endl;
}
class Foo1
{
public:
static int foo_func(int a)
{
std::cout << __FUNCTION__ << "(" << a << ") ->: ";
return a;
}
};
class Bar1
{
public:
int operator()(int a)
{
std::cout << __FUNCTION__ << "(" << a << ") ->: ";
return a;
}
};
void Func(void)
{
}
struct Foo
{
void operator()(void)
{
}
};
struct Bar
{
using fr_t = void(*)(void);
static void func(void)
{
}
operator fr_t(void)
{
return func;
}
};
struct A
{
int a_;
void mem_func(void)
{
}
};
int main(int argc, char *argv[])
{
void(*func_ptr)(void) = &Func;
func_ptr();
Foo foo;
foo();
Bar bar;
bar();
void(A:: *mem_func_ptr)(void) = &A::mem_func;
int A::*mem_obj_ptr = &A::a_;
A aa;
(aa.*mem_func_ptr)();
aa.*mem_obj_ptr = 123;
std::function<void(void)> fr1 = func;
fr1();
std::function<int(int)> fr2 = Foo1::foo_func;
std::cout << fr2(123) << std::endl;
Bar1 bar;
fr2 = bar;
std::cout << fr2(124) << std::endl;
return 0;
}