簡體   English   中英

std :: pair中的模板模板參數

[英]template template parameter in std::pair

對於kd樹,我有一個Node類,如下所示:

template<typename DataType, unsigned int Dim>
struct Node
{
    DataType* pos;
    DataType payload;
    struct Node<DataType, Dim>* left;
    struct Node<DataType, Dim>* right;
};

我試圖建立一個元組類型,將查詢節點到找到的鄰居和鄰居節點本身的距離結合起來,如下所示:

using std::pair<float, Node<typename DataType, Dim>*> = QueryResult;

不幸的是,上面的代碼給了我錯誤:

[...]錯誤:模板參數個數錯誤(1,應為2)

因此,按照我在這里找到的一些線程,我嘗試了幾種不同的方法。 首先,我認為也許應該在Node類內部聲明第二個參數,而無需聲明任何內容。

using std::pair<float, Node<DataType, Dim>*> = QueryResult;

[...]錯誤:模板ID可能未出現在using聲明中

因此,我嘗試告訴編譯器它是一個嵌套模板;

using std::pair<float, template Node<typename DataType, Dim>*> = QueryResult;

[...]錯誤:模板參數2無效

還有一個使用適配器類的解決方案,但這也不起作用。 我不確定如何設置在這里要做的事情。 任何幫助或指針將不勝感激。 我並不精通模板編程,但是正在使用這個項目來增加我的知識。

謝謝!

您幾乎擁有它。 typedef不同,using聲明將別名作為第一個符號。 那意味着

using std::pair<float, Node<DataType, Dim>*> = QueryResult;

需要是

using QueryResult = std::pair<float, Node<DataType, Dim>*>;

如果您當時不知道需要使用什么DataTypeDim ,則需要將其設置為模板別名,例如

template<typename DataType, unsigned int Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;

然后你會用它像

QueryResult<type_you_want, dim_you_want> some_name;

如評論:

template<typename DataType, unsigned Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;

暫無
暫無

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

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