|
在 C 风格的编程中,函数指针主要用于将函数传递给其他函数。 此方法使调用方能够在不修改函数的情况下自定义函数的行为。 在新式 C++ 中,lambda 表达式提供了相同的功能,并且提供了更高的类型安全性和其他优势。
函数指针声明指定指向函数必须具有的签名:
// Declare pointer to any function that...
// ...accepts a string and returns a string
string (*g)(string a);
// has no return value and no parameters
void (*x)();
// ...returns an int and takes three parameters
// of the specified types
int (*i)(int i, string s, double d);
以下示例展示了函数 combine,该函数将接受 std::string 并返回 std::string 的任何函数作为参数。 根据传递给 combine 的函数,它将在前面或后面添加字符串。
#include <iostream>
#include <string>
using namespace std;
string base {"hello world"};
string append(string s)
{
return base.append(" ").append(s);
}
string prepend(string s)
{
return s.append(" ").append(base);
}
string combine(string s, string(*g)(string a))
{
return (*g)(s);
}
int main()
{
cout << combine("from MSVC", append) << "\n";
cout << combine("Good morning and", prepend) << "\n";
}
|
|