मुझे टेम्पलेट में दूरी-फ़ंक्शन पास करने की आवश्यकता है। इसलिए मैं boost :: function और boost :: bind का उपयोग करता हूं। लेकिन मुझे समझ नहीं आता कि मैं क्या के लिए वर्ग दूरी पारित करने के लिए है:एक बढ़ावा देने के लिए :: एक टेम्पलेट के लिए समारोह; कौन सा वर्ग बढ़ावा देता है :: फ़ंक्शन
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) {}
...
}
टेम्पलेट के लेखक द्वारा उदाहरण इस प्रकार है:
: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);
...
}
अब यह मेरा मुख्य है
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);
...
}
पहले, क्या कोई मुझे समझा सकता है कि (* कॉन्स्ट) का मतलब है या मैं इसके बारे में कहां पढ़ सकता हूं?
और दूसरा: मुझे लगता है कि मैंने आपको जो कुछ भी चाहिए, उसे लिखा है, के लिए क्या लिखना है ??? लेकिन मुझे यह नहीं मिला।
मैं पहले से ही करने की कोशिश की:
boost::function<float (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
और
float (*const) (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
लेकिन यह अच्छा प्रयास और त्रुटि :)
बहुत बहुत धन्यवाद! यह संकलित करता है! मैं इसे हल करने के रूप में कैसे टैग कर सकता हूं? –
@ user__42: उत्तर के ऊपरी बाईं ओर स्थित चेकमार्क आइकन की तलाश करें। – aschepler