如何将引用函数传递给另一个函数

Posted

技术标签:

【中文标题】如何将引用函数传递给另一个函数【英文标题】:How to pass reference-to-function into another function 【发布时间】:2011-10-31 20:31:51 【问题描述】:

我一直在阅读有关函数指针以及将它们用作其他函数的参数的内容。

我的问题是如何在不使用指针的情况下通过引用传递函数?我一直在网上寻找答案,但没有找到好的答案。

我知道您可以像这样通过引用传递变量:void funct(int& anInt);。如果参数不是对变量的引用,而是对函数的引用,你会如何做类似的事情?

另外,你将如何在函数体中使用对函数的引用?

【问题讨论】:

注意:不能传递函数。您只能将引用或指针传递给函数。 【参考方案1】:
#include <iostream>
using namespace std;

void doCall( void (&f)(int) )

    f( 42 );


void foo( int x )

    cout << "The answer might be " << x << "." << endl;


int main()

    doCall( foo );

【讨论】:

出于好奇,我为什么要使用对函数的引用而不是指向函数的指针? @FredOverflow:因为指针可以为空或无效。引用保证它有效且不为空(没有空引用),否则程序中存在错误。 @Alf P. Steinbach:“否则程序中存在错误”理论上听起来不错,但如果您有类似 sometype &amp;ref = *ptr; 的内容,则指针中的地址将被简单地复制到引用中的地址,可能无效或为空。当ptr 无效或为空时,您可能会说上面的语句是未定义的行为,但是在编译或运行时不会有任何迹象,因此仍然由程序员来确保它是有效且非空的,就像您使用指针一样。所以我说程序员没有任何区别。 我认为有很大的不同。如果您在每个 API 中使用 null 不是合理值的引用来构建整个代码库,那么sometype &amp;ref = *ptr; 的情况就不会经常出现,因为您到处都有引用。在 API 中接受引用和指针之间也存在语义差异。接受引用清楚地表明该函数不能用 null 调用。如果是引用,那就是调用者的责任,如果是指针,那就是被调用者的责任。

以上是关于如何将引用函数传递给另一个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将回调作为参数传递给另一个函数

Kotlin:如何将一个函数作为参数传递给另一个函数?

QML:如何将javascript函数作为参数传递给另一个函数

Python - 将一个函数传递给另一个函数

如何将“委托”函数的参数传递给从孩子到父母的另一个函数?

如何将一个类函数传递给同一个类中的另一个?