2012-11-17 62 views
0

我有一個Kd-Tree實現,它被模板化爲接受任何大於0的維和任何浮點類型(float,double等等)。這樣的事情:假設類模板參數

template <typename real, size_t dimensions> class KdTree 
{ 
    // stuff 
} 

而且我有一個伴隨「點」類型具有完全相同的模板佈局。然而,這一點類型需要從kd-tree類別以外訪問。現在,每次我需要在我的kd-tree代碼中創建臨時點時,我需要明確地去KdPoint<real, dimensions>,這很煩人,使我的行很長,並且對代碼沒有任何價值。

有沒有什麼辦法可以告訴編譯器隱式地假設realdimensions被傳遞給類的所有值?以某種方式將兩個模板列表鏈接在一起。爲了能夠輸入KdPoint,編譯器將根據類所接收到的模板參數直接知道應該放入哪些內容。

否則,我需要使用宏來明確地將後者擴展爲前者,哪種類型的吸引。

回答

1

你可以一個typedef添加到KdTree類:

template <typename real, size_t dimensions> class KdTree 
{ 
    typedef KdPoint<real, dimensions> KdPoint_; 
    // stuff 
}; 

,並使用KdPoint_內部。如果你想點類型爲外部訪問,給typedef公共訪問,並沒有按-T端_名稱:

template <typename real, size_t dimensions> class KdTree 
{ 
public: 
    typedef KdPoint<real, dimensions> KdPointType; 
    // stuff 
}; 

這則這樣的訪問:

KdTree<float, 5>::KdPointType 
+0

謝謝 - 第一個選項是我的最實用的。 – Thomas

1
template <typename real, size_t dimensions> class KdTree 
{ 
    public: 
    typedef KdPoint<real, dimensions> point_type; 
}