gpt4 book ai didi

c++ - 序列化 C++ 仿函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:38 26 4
gpt4 key购买 nike

你能保存 C++ lambda/functor 的函数体吗?

例如,假设你有

light0->lightFunction = []( real tEl, real pAz ) -> Vector {

return Vector(
// red is up lobe
std::max<real>( 0., 5*cos(tEl)-4 ),

// green lower lobe
std::max<real>( 0., -4*sin(tEl-PI)*cos(pAz-2.5)-3),

0. ) ;
} ;

并且您想保存函数体,以便稍后加载它(而不是总是必须对其进行硬编码)。

你能做到吗?

最佳答案

这个 lambda 没有状态(不是闭包),所以它是一个普通函数。

因此,保存它与保存任何函数都是同样的问题。这在一般情况下是不可能的,但只要你将它加载回完全相同的进程,它在实践中可能是可能的,只需通过 reinterpret_cast 将函数指针指向 char * 并读取足够数量的字节。不过,这将是高度不可移植的,并且可能根本无法在某些体系结构或某些编译器上工作。

同样:没有符合标准的方式将代码视为数据

另一方面,有符号表达式库允许使用普通代码语法捕获表达式树,但你根本不用处理仿函数(没有代码,只有数据)。

关于c++ - 序列化 C++ 仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com