Ho bisogno di passare una funzione di distanza a un modello. Quindi uso boost :: function e boost :: bind. Ma non capisco cosa devo passare per classe Distanza:passando una funzione boost :: a un modello; quale classe è boost :: function
template<class DataType, class Point, class Distance>
class CoverTree
{
Distance distance;
...
public:
CoverTree(const Distance& distance) : max_level(default_max_level), min_level(default_max_level), distance(distance) {}
...
}
l'esempio dall'autore del modello si presenta così:
float euclidian(const std::vector<float>& p1, const std::vector<float>& p2)
{
...
}
int main(int argc, char** argv)
{
CoverTree<float, std::vector<float>, float (*const)(const std::vector<float>&, const std::vector<float>&)> tree(&euclidian);
...
}
Ora, questo è il mio principale:
int main(int argc, char** argv)
{
AllData myData;
boost::function<float (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)> j_dist;
j_dist = boost::bind(&AllData::jaccard_distance, myData, _1, _2);
myData.AddData("C:\\...");
cout<<j_dist(myData.DATAx.begin()+20, myData.DATAx.begin()+40)<<endl; //works fine
CoverTree<float, vector<Frame>::const_iterator, ???> tree(&j_dist);
...
}
In un primo momento, qualcuno può spiegarmi cosa significa (* const) o dove posso leggere su questo?
E secondo: Penso di aver scritto tutto il necessario, di dire cosa scrivere per ??? ma non capisco.
Ho già provato:
boost::function<float (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
e
float (*const) (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
ma questo era bella prova ed errore :)
Grazie mille! Questo compila! Come posso taggare questo come risolto? –
@ utente__42: cerca l'icona del segno di spunta vicino all'angolo superiore sinistro della risposta. – aschepler