将本地函数作为参数传递给全局函数

时间:2012-02-03 16:57:35

标签: c++ templates functor

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

template<class integrand>
void integrate(integrand f) {
   ... 
   f();
   ...
}

int main() {
   struct twofer {
       int operator()(int i) const { return 2*i; }
   };

   integrate(twofer());
}

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

2 个答案:

答案 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改变了它。