找不到某些提升库功能
Can't find certain Boost library function
我正试图在c#中实现k-d树,我正在查看的源代码是c++中的Boost。我要求的函数是util::subtract()
。我已经搜索了Boost的所有文档,但我找不到它。
第94行是我要翻译的函数。完整的文件可以在这里找到:https://github.com/gvd/kdtree/blob/master/kdtree.h
如果有人有更好的源代码,我可以实现,我将非常感激。
你正在看的是一个c++内联函数模板,它实际上是在你链接的头文件的顶部定义的(因此是util::
命名空间而不是boost::
命名空间)。在c#中,如果您将Dimension
字段从封闭struct
的c++中取出,并将其作为第四个参数简单地传递给c#静态函数,那么看起来您可以在静态函数中实现此逻辑。
subtract(...)
有3种不同的函数模板定义,但只有一个有实质内容。为了完整起见,我将在这里包含该函数模板体(请注意,它包含一个递归调用,其中Dimension
字段用作计数器,一旦它等于dim
,就会限制递归):
template <typename Point, std::size_t Dimension, std::size_t Count>
struct dimension_extractor {
static inline typename boost::geometry::default_distance_result<Point>::type subtract(const Point &p1, const Point &p2, std::size_t dim) {
if (Dimension == dim) {
return boost::geometry::get<Dimension>(p1) - boost::geometry::get<Dimension>(p2);
}
return dimension_extractor<Point, Dimension + 1, Count>::subtract(p1, p2, dim);
}
};
不可否认,如果不检查boost::geometry
库,直接粗略地移植到c#可能看起来像以下伪代码:
public static boost.geometry.default_distance_result<Point>.type subtract(Point p1, Point p2, uint dim, uint currDim)
{
if (currDim == dim)
{
// it looks like .get() is a templated function, so the actual call syntax may be somewhat different
return boost.geometry.get(p1, currDim) - boost.geometry.get(p2, currDim);
}
else
return subtract(p1, p2, dim, currDim + 1);
}
在c++上下文中,currDim
参数(表示Dimension
结构体字段)似乎总是初始化为0,然后递增,直到达到dim
。我不确定为什么会出现这种明显不必要的递归——它可能只是c++编译器的一个技巧(c++模板通常比相关的c#泛型更不清晰)。如果是这种情况,您可能只是能够从c#代码中完全删除递归方面。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- HDF5 构建了并行支持,但找不到特定于 mpi 的功能
- 找不到超载的成员功能,类位于标题中
- 在OPENCV 3中找不到OpenCV 2 Delaunay三角剖分功能
- 传递到功能时找不到C 矢量
- 是否有可以将每个双精度转换为唯一uint64_t,保持精度和顺序的功能?(为什么我找不到?
- 找不到GLFW功能
- 如何提供链接时找不到的功能
- calc_min找不到reducer_min_index的功能
- 错误:控制到达非无效功能的末尾.找不到修复错误的位置
- 为什么C++找不到模板功能?
- SDL 找不到我的主要功能
- 在开源项目中找不到功能Get_AacEncoder,即使在系统中也是如此
- 八度发烧:找不到功能
- 找不到绘图功能的C++包含文件
- 找不到某些提升库功能