定义函数并从函数返回函数
Define and return a function from a function?
如何在函数内定义和返回函数?
例如,我们有一个这样的函数:
float foo(float val) {return val * val;}
现在,需要的是像 bar 这样的函数:
typedef float (*func_t)(float)
// Rubish pseudo code
func_t bar(float coeff) {return coeff * foo();}
// Real intention, create a function that returns a variant of foo
// that is multiplied by coeff. h(x) = coeff * foo(x)
到目前为止,我想出的唯一办法是使用 lambda 或类。有没有一种直接的方法可以做到这一点,而不会造成不必要的复杂?
使用 std::function
std::function<float(float)> bar(float coeff)
{
auto f = [coeff](float x)
{
return coeff * foo(x);
};
return f;
}
然后,您将像这样使用它:
auto f = bar(coeff);
auto result = f(x);
C++11 中使用 lambda 函数的闭包(带 std::function
(是合适的,建议在这里使用。所以有
std::function<int(int)> translate (int delta) {
return [delta](int x) {return x+delta;} }
然后,您可以稍后编写代码:
auto t3 = translate(3);
现在t3
是"函数",稍后添加 3:
int y = t3(2), z = t3(5);
当然,y
必须是5,z
是8。
你也可以使用一些JIT编译库来动态生成机器代码,例如GCCJIT,LLVM或libjit,或asmjit;或者你甚至可以在一些生成的文件中生成一些C++(或C(代码/tmp/mygencod.cc
并分叉编译(例如 g++ -Wall -O -fPIC /tmp/mygencod.cc -shared -o /tmp/mygencod.so
( 到一个/tmp/mygencod.so
插件中,然后在 POSIX 系统上使用 dlopen
动态加载该插件(后来使用 dlsym 从名称中获取函数指针;当心名称重整C++(。我在GCC MELT中做这样的事情
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量