c++ - 将函数名称作为参数传递给函数

标签 c++ parameter-passing function-calls

是否可以将一个函数的名称(比如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/

相关文章:

c++ - 重载 MyString 类的比较运算符

c++ - 双印不失精度

c++ - 从函数返回值 : reference vs struct

C - printf 输出说明 ("%d %d\n",k=1,k=3);

c - 将值直接作为数组传递给 C 中的函数

c++ - 多组独立的随机数

c++ - while 循环未初始化

optimization - 过度使用函数调用会影响性能吗?特别是在 Fortran 中

python-3.x - 如何在python 3解释器中运行带有参数的python脚本?

java - 使用外部 jar 命令通过命令行向主类发送参数