将lambda表达式或函数保存到二进制文件

时间:2015-05-28 17:22:48

标签: c++ c++11 lambda

基本上,我有一个带一些参数的函数,其中一个是lambda表达式或函数:

foo(int i, int j, std::function<double(double)> func);

我希望能够将这些参数保存到二进制文件中,如下所示:

std::ofstream os("test.bin", std::ios::out | std::ios::binary);
os.write(reinterpret_cast<const char*>(&i), std::streamsize(sizeof(int)));
os.write(reinterpret_cast<const char*>(&j), std::streamsize(sizeof(int)));
// What to do for func?

有办法做到这一点吗?这个save函数将在foo之前调用,因此我知道输入是实际函数还是lambda(如果有帮助)。它不需要在系统之间移植 - 我希望能够将这些参数保存到磁盘,以便我可以加载它们并在以后使用相同的参数重新运行该函数。

1 个答案:

答案 0 :(得分:0)

我认为将lamda函数直接保存到磁盘是不可能的。但是,您可以实现数据结构以首先注册您的函数,然后将结构的引用保存到磁盘。这看起来像这样:

std::map<std::string,std::function<double(double)> > functions;

当程序启动时,您可以注册以下功能:

...
functions["func1"] = ...
functions["func2"] = ...
...

然后你改变这样的foo:

foo(int i, int j, std::string func)
{
    //Save i, j and func
    //func can be saved to disk because it is a std::string
}

然后你可以像这样调用所需的函数:

double val = 1.0;
double res = functions[func](val);

这种方法的唯一问题是你需要注册所有可能的功能。