Передача типа шаблонной функции в шаблонный класс, используемый в ней? - PullRequest
0 голосов
/ 26 августа 2010

Я пытаюсь построить шаблонную функцию. Внутри используются шаблонные классы, и я хотел бы передать тип шаблона функции этим классам. Итак, у меня есть:

template <class T>
T find_bottleneck (ListGraph &g, CrossRefMap<ListGraph, Edge, T> &weight, Node &s, Node &t) {
    // Check if theres a single edge left
    if (countEdges(g) == 1) {
        CrossRefMap<ListGraph, Edge, T>::ValueIt itr = weight.beginValue();
        return *itr;
    }

Однако это не удается, ссылаясь на

lemon_graph.cpp: In function ‘T find_bottleneck(lemon::ListGraph&, lemon::CrossRefMap<lemon::ListGraph, lemon::ListGraphBase::Edge, T>&, Node&, Node&)’:
lemon_graph.cpp:20: error: expected ‘;’ before ‘itr’
lemon_graph.cpp:21: error: ‘itr’ was not declared in this scope

Я попытался воссоздать это, используя простой пример функции, которая генерирует векторы на основе переданного ей типа и скомпилирована нормально, поэтому я не уверен, в чем здесь проблема.

1 Ответ

4 голосов
/ 26 августа 2010

Это просто пропущенный typename.

typename CrossRefMap<ListGraph, Edge, T>::ValueIt

typename - это ответ как минимум на 50% всех вопросов, связанных с C ++ - шаблонами :-) Он говорит компилятору, что следующеевсегда тип, независимо от параметров шаблона (например, ValueIt может быть int вместо typedef для итератора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...