在C ++中,将局部函数或函子传递给全局函数是完全不可能的吗?似乎所有迹象都表明“不”。这似乎是解决像积分器这样的简单数学函数实现的最简单方法:
template<class integrand>
void integrate(integrand f) {
...
f();
...
}
int main() {
struct twofer {
int operator()(int i) const { return 2*i; }
};
integrate(twofer());
}
或类似的东西。这失败是因为我无法将本地对象传递给模板。我知道新标准允许在这里使用lambda函数,但我现在不能使用新标准。我真的希望函数在本地声明,因为我认为它使事情可读,特别是在真实代码中,这是代理。我知道我可以把两个人放在一个充满可积函数的类或结构中,但我认为这再次破坏了可读性。还有其他选择吗?
答案 0 :(得分:1)
您可以使用指向成员函数的指针,但函数应该是静态的。这对我有用:
#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;
}
答案 1 :(得分:0)
您将对象与对象混淆。您不能使用本地声明的类来实例化模板对象。
我不确定你的本地功能是什么意思。在C ++中没有本地函数这样的东西。从你的代码。没有什么可以阻止你调用本地定义的类的本地定义对象的仿函数。但是你不能用它来实例化模板。
我不知道是否用C ++ 11改变了它。