2017-07-14 60 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

謝謝,我試圖避免這一切,但我想沒有可行的方法 –