📅  最后修改于: 2023-12-03 15:06:30.574000             🧑  作者: Mango
函数指针是指向函数的指针变量,它们的用途是可以将一个函数作为参数传递给另一个函数,或者将一个函数的指针返回给调用者。在 C/C++ 中,函数指针也是一个变量,因此可以将它们作为返回值。
一个函数可以返回一个指向另一个函数的指针。以下是一个返回一般函数指针的示例代码:
#include <iostream>
void func1()
{
std::cout << "Hello from func1!" << std::endl;
}
void func2()
{
std::cout << "Hello from func2!" << std::endl;
}
typedef void (*FuncPtr)();
FuncPtr getFunction(bool b)
{
if (b)
return func1;
else
return func2;
}
int main()
{
FuncPtr fp = getFunction(true);
(*fp)(); // Hello from func1!
fp = getFunction(false);
(*fp)(); // Hello from func2!
return 0;
}
在上述代码中,getFunction()
函数返回一个名为 FuncPtr
的类型别名,指向无参且返回值为 void
的函数。如果传入的 bool
参数为 true
,则返回 func1
函数的指针,否则返回 func2
函数的指针。在 main()
函数中,我们可以用 fp
指针变量保存返回的函数指针,并通过 (*fp)()
来调用对应的函数。
如果要返回一个成员函数的指针,则必须使用类指针或引用来调用该函数。以下是一个返回成员函数指针的示例代码:
#include <iostream>
class MyClass
{
public:
void func1()
{
std::cout << "Hello from MyClass::func1!" << std::endl;
}
void func2()
{
std::cout << "Hello from MyClass::func2!" << std::endl;
}
typedef void (MyClass::*MemFuncPtr)();
MemFuncPtr getFunction(bool b)
{
if (b)
return &MyClass::func1;
else
return &MyClass::func2;
}
};
int main()
{
MyClass obj;
MyClass::MemFuncPtr fp = obj.getFunction(true);
(obj.*fp)(); // Hello from MyClass::func1!
fp = obj.getFunction(false);
(obj.*fp)(); // Hello from MyClass::func2!
return 0;
}
在上述代码中,MyClass
类定义了两个成员函数 func1()
和 func2()
,并且定义了一个 MemFuncPtr
类型别名,指向成员函数指针。在 getFunction()
函数中,如果传入的 bool
参数为 true
,则返回 func1
成员函数的指针,否则返回 func2
成员函数的指针。在 main()
函数中,我们首先创建一个 MyClass
对象 obj
,然后通过 obj.getFunction(true)
得到指向 func1
成员函数的指针,并将其赋值给 fp
变量。最后,我们通过 (obj.*fp)()
的方式调用对应的成员函数。
总之,从 C/C++ 中的函数返回函数指针可以非常灵活的应用于各种场景,不过需要特别注意函数指针的使用和声明方式。