【发布时间】:2012-12-11 21:50:22
【问题描述】:
我需要将距离函数传递给模板。因此我使用 boost::function 和 boost::bind。但我不明白我必须通过 class Distance:
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);
...
}
首先,有人能解释一下 (*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&)
但这是很好的尝试和错误:)
【问题讨论】:
标签: c++ templates boost boost-bind boost-function