将模板函数的类型传递给其中使用的模板类?

时间:2010-08-26 18:48:37

标签: c++ templates class function

我正在尝试构建模板函数。使用内部模板化类,我想将函数的模板类型传递给这些类。所以我有:

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 个答案:

答案 0 :(得分:4)

缺少typename

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

typename是所有C ++中至少50%的答案 - 与模板相关的问题:-)它告诉编译器,无论模板参数如何,后面的内容总是一个类型(ValueIt例如,对于迭代器,可以是int而不是typedef