将局部函数作为参数传递给全局函数

Pass local function as parameter to global function

本文关键字:函数 全局 参数传递 局部      更新时间:2023-10-16

在C++中,是否完全不可能将局部函数或函子传递给全局函数?似乎所有的迹象都指向"不"。这似乎是像积分器一样解决简单数学函数实现的最简单方法:

template<class integrand>
void integrate(integrand f) {
   ... 
   f();
   ...
}
int main() {
   struct twofer {
       int operator()(int i) const { return 2*i; }
   };
   integrate(twofer());
}

或者类似的东西。这失败了,因为我无法将本地对象传递给模板。我知道新标准允许在这里使用lambda函数,但我现在不能使用新标准。我真的希望这个函数也能在本地声明,因为我认为它能让事情变得可读,尤其是在作为代理的真实代码中。我知道我可以把twofer放在一个充满可积函数的类或结构中,但我再次认为这会破坏可读性。有其他选择吗?

可以使用指向成员函数的指针,但函数应该是静态的。对我有用:

#include <iostream>
using namespace std;
typedef int (*Integrand)(int i);
int integrate(Integrand f) {
    return f(2)+f(3)+f(4);
}
int main() {
   struct Twofer {
       static int function(int i){return 2*i;}
    } t;
   cout << integrate (t.function) << "n";
   return 0;
}

您混淆了类和对象。不能使用本地声明的类来实例化模板对象。

我不知道你所说的局部函数是什么意思。在C++中没有局部函数这样的东西。根据您的代码。没有什么可以阻止您调用本地定义类的本地定义对象的函子。但是你不能用它实例化一个模板

我不知道C++11是否改变了这一点。