簡體   English   中英

找不到某些Boost庫功能

[英]Can't find certain Boost library function

我正在嘗試在C#中實現一個kd樹,而我正在尋找的源是在帶有Boost的C ++中。 我要查找的功能是util::subtract() 我已經搜索了Boost的所有文檔,但找不到任何地方。

行號94是我要翻譯的功能。 完整文件可以在這里找到: https : //github.com/gvd/kdtree/blob/master/kdtree.h

如果有人可以提供更好的資源,我也將不勝感激。

您正在查看的是C ++內聯函數模板,它實際上是在鏈接的頭文件的頂部定義的(因此util::名稱空間而不是boost::名稱空間)。 在C#中,如果將Dimension字段從C ++封閉struct移出並將其簡單地作為第4個參數傳遞給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結構字段)始終初始化為零,並遞增直到達到dim為止。 我不確定為什么發生這種顯然不必要的遞歸-這可能只是C ++編譯器的把戲(C ++模板通常不如相關的C#泛型那么清晰)。 在這種情況下,您可能僅能從C#代碼中完全刪除遞歸方面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM