是否可以将一个函数的名称(比如A)作为参数传递给另一个函数(比如B),然后从函数B调用函数A。也就是说,函数名将存储在B中的一个变量中,并使用它调用名称在变量中的函数。例如,在 C++ 排序函数中,第一个和第二个参数是迭代器,但第三个参数是函数的名称。
最佳答案
你可以为“任何可以用两个参数调用的东西”引入一个模板参数(这里是Pred
):
template <typename Iter, typename Pred>
void mysort(Iter begin, Iter end, Pred predicate)
{
--end;
// ...
if (predicate(*begin, *end))
{
// ...
}
// ...
}
然后您可以传递良好的旧 C 函数指针或 C++ 函数对象:
bool function(int x, int y)
{
return x < y;
}
struct function_object
{
bool operator()(int x, int y)
{
return x < y;
}
};
int main()
{
int numbers[] = {543, 6542654, 432514, 54, 45, 243};
mysort(numbers + 0, numbers + 6, &function);
mysort(numbers + 0, numbers + 6, function_object());
}
如您所见,函数对象是适当重载 operator()
的类的对象。
关于c++ - 将函数名称作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356303/