我需要將距離函數傳遞給模板。因此我使用boost :: function和boost :: bind。但我不明白我必須要通過對類距離:將boost :: function傳遞給模板;什麼類是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) {}
...
}
的例子由模板的作者是這樣的:
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);
...
}
起初,可以somone解釋我什麼(* const)意味着什麼或者我可以在哪裏讀到這個?
和第二: 我想我寫了你需要的一切,告訴要寫什麼???但我不明白。
我已經嘗試過:
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