2016-06-29 6 views
0

Mein Plan ist es, Hunderte (oder sogar Tausende) von (Interpolations-) Funktionen im multidimensionalen Array multi_array aus der Boost-Bibliothek zu speichern. Ich muss sie speichern, da ich sie an verschiedenen Punkten im Projekt mit verschiedenen Zahlen als Argumente aufrufen muss. (Ich verwende die linterp-Bibliothek http://rncarpio.github.io/linterp/, um die Interpolationsfunktionen zu erstellen).(C++) Speichern der Lambda-Funktion in einem Boost multi_array

kann ich die Funktionen in einem Vektor speichern wie im folgenden Beispiel:

// creating the vector, storing the function 
std::vector< std::function< double(double *x) > > interp_list(4); 
// storing the function in the vector 
interp_list[0] = ([&] (double *x) { return interp1.interp(x); } ); 

jedoch das gleiche mit einem mehrdimensionalen Array versucht immer zu kompilieren Fehler:

// creating the array, I want to store the functions in 
boost::multi_array< std::function<double (std::vector<double>::iterator)>, 2> interp2_list[2][2]; 
// storing the function in the vector 
interp2_list[0][0] = ([&] (std::vector<double>::iterator x) { return interp1.interp(x); } ); 

ich zumindest " 7 Dimensionen "für die Funktion (z. B. interp_list [6] [2] [3] [3] [64] [12] [2]) und möchte daher darüber hinwegschleifen.

EDIT 1,0: Hinzufügen von Fehlermeldung:

In Datei von /usr/include/boost/multi_array.hpp:26:0 enthalten, aus ./StoreInterp.cpp:16: /usr/include /boost/multi_array/multi_array_ref.hpp: In Instanziierung von »boost :: multi_array_ref & boost :: multi_array_ref :: op erator = (const ConstMultiArray &) [mit ConstMultiArray = main() :::: iterator)>; T = std :: Funktion>)>; lang unsigned int NumDims = 2ul] «: /usr/include/boost/multi_array.hpp:371:26: erforderlich durch» boost :: multi_array & boost :: multi_array :: o perator = (const ConstMultiArray &) [mit ConstMultiArray = main() :::: Iterator)>; T = std :: Funktion>)>; lang unsigned int NumDims = 2ul; Allocator = std :: allocator>)>>] « ./StoreInterp.cpp:108:22: von hier erforderlich /usr/include/boost/multi_array/multi_array_ref.hpp:482:30: Fehler:» const struct main() :::: iterator)> «hat kein Mitglied mit dem Namen » num_dimensions « BOOST_ASSERT (other.num_dimensions() == this-> num_dimensions());

+0

Kompilierungsfehler werden normalerweise von einer Fehlermeldung begleitet. Hast du diese Nachricht gelesen? Was sagt es? – user2079303

Antwort

0

Ihre Deklaration von interp2_list ist falsch, Sie deklarieren ein 2-D-Array von boost::multi_array<> mit 2 Dimensionen, so erhalten Sie ein 4-D "Ding" mit Extent 2 für die zwei ersten Dimension, aber keinen Umfang für die letzten beiden Maße.

Was Sie wirklich wollen, ist ein einzelner boost::multi_array<> mit korrekten Abmessungen initialisiert:

boost::multi_array< std::function<double (std::vector<double>::iterator)>, 2> 
    interp2_list(boost::extents[2][2]); 

boost documentation See.

+0

Vielen Dank. Eigentlich hätte ich das wissen müssen, denn ich habe es an verschiedenen Stellen in meinem Code gemacht und ich habe mir tatsächlich die Dokumentation angeschaut! – USC

Verwandte Themen