2017-07-14 63 views
-3

我在程序中进行了大量的数值积分和插值,并将结果保存在std :: function变量中。由于我不想每次都进行计算 - 只有当底层模型发生变化时 - 是否有办法将它们写入文件?或者我应该只是将数据写入文件并在启动时加载/插入它们?将std :: function保存到文件

谢谢大家, 尼克拉斯

编辑:例如,我使用TSpline3对象,然后“拯救”他们的lambda函数:

class Model 
{ 
    std::function<double(const double)> interpolated_function; 
}; 

// In the code 
std::vector<double> x; std::vector<double> y; Model *model; 
// Calculations 
auto spline = std::make_shared<TSpline3>("name", x.data(), y.data(), x.size()); 
model->interpolated_function = [spline] (const double x) { return spline->Eval(x); } 

我知道我可以保存根TSpline3对象,但我想能够在不更改模型类的情况下更改插值方法。

+6

你节省*结果*在'的std ::调用功能? – Borgleader

+1

***有没有办法将它们写入文件?***最有可能。我可以告诉你,因为你没有发布代码。 – drescherjm

+2

***在我的程序中并将结果保存在std :: function变量中***这没有任何意义。请发布一个简单的例子。 – drescherjm

回答

1

不,没有办法有用 serialise这样一个拉姆达。所有的lambda都是一个shared_ptr和一个方法名。

重要数据在TSpline3对象中。除此之外。确定哪些它的方法,如果你有(虽然评估和演示听起来好像“它永远只能这样”,这样可能也没必要)

class Model { 
    shared_ptr<TSpline3> spline; 
    double interpolated_function(double x); 
}; 
double Model::interpolated_function(double x) { spline->Eval(x); }; 
+0

如果我只有一个Model对象,有没有办法访问保存的shared_ptr? 还是必须在计算后立即保存数据? –

+0

谢谢,我试图避免这一切,但我想没有可行的方法 –