Tôi cần phải vượt qua một khoảng cách chức năng cho một mẫu. Vì vậy tôi sử dụng boost :: function và boost :: bind. Nhưng tôi không hiểu những gì tôi phải vượt qua cho lớp cách:chuyển một hàm tăng :: vào mẫu; những gì lớp học được tăng :: chức năng
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) {}
...
}
ví dụ bởi tác giả của mẫu trông như thế này:
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);
...
}
Bây giờ đây là chính tôi:
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);
...
}
Lúc đầu, ai đó có thể giải thích cho tôi điều gì (* const) có nghĩa là hoặc nơi tôi có thể đọc về điều này?
Và thứ hai: Tôi nghĩ rằng tôi đã viết mọi thứ bạn cần, để nói những gì cần viết cho ??? nhưng tôi không hiểu.
Tôi đã cố gắng:
boost::function<float (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
và
float (*const) (const vector<Frame>::const_iterator&, const vector<Frame>::const_iterator&)
nhưng điều này là thoải mái thử và lỗi :)
Cảm ơn bạn rất nhiều! Điều này biên dịch! Tôi có thể gắn thẻ thẻ này như thế nào? –
@ user__42: Tìm biểu tượng dấu kiểm gần phía trên bên trái của câu trả lời. – aschepler