параметр шаблона шаблона в std :: pair - PullRequest
0 голосов
/ 22 января 2019

Для дерева 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;

[...] ошибка: идентификатор шаблона может не отображаться в объявлении использования

, поэтому я попытался сообщить компилятору, что это вложенный шаблон;

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

[...]: аргумент шаблона 2 недопустим

Было также решение с использованием адаптера класса , но оно также не работало.Я не уверен, как я могу настроить то, что я пытаюсь сделать здесь.Любая помощь или указатели будут с благодарностью.Я не очень разбираюсь в шаблонном программировании, но использую этот проект для расширения своих знаний.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 января 2019

У вас почти есть это.В отличие от typedef объявление использования ставит псевдоним в качестве первого символа.Это означает, что

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

должно быть

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

Если вы не знаете, что DataType и Dim должны быть в этой точке, тогда вам нужно сделать этоПсевдоним шаблона, например

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

, и тогда вы будете использовать его как

QueryResult<type_you_want, dim_you_want> some_name;
0 голосов
/ 22 января 2019

как прокомментировано:

template<typename DataType, unsigned Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...