将局部函数作为参数传递给全局函数
Pass local function as parameter to global function
在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是否改变了这一点。
相关文章:
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- 在命名空间中使用全局命名空间中的函数
- C++ 在编译时具有函数计算全局变量
- 在具有全局类型def的类中使用成员函数指针
- 修改程序的入口点时未调用全局变量的构造函数
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 全局函数参数
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 初始化与函数输入相关的全局数组
- 删除全局隐式函数 - 避免使用不明确的运算符
- 如何在全局变量的构造函数之前运行函数
- 如何定义全局函数指针并分配给特定地址
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 在函数中用不同的名称引用全局向量
- 如何在一个结构体中为多个函数全局存储数据