使用模板参数中定义的类型

时间:2009-04-12 10:56:10

标签: c++ templates

使用vectorlist等容器类时,我可以通过编写vector<type>::value_type来使用元素的类型。

但是,以下代码

template<class container>
void foo(container& c)
{
    typedef container::value_type elementtype;
    elementtype b;
}

失败,错误为“expected initializer before ‘elementtype’”。 当容器类型作为模板参数给出时是否可以推断元素类型,还是必须将元素类型作为额外的模板参数?

1 个答案:

答案 0 :(得分:12)

您缺少必需的typename关键字:

typedef typename container::value_type elementtype;

这是因为container是此模板中的依赖名称,因此编译器无法知道container :: value_type是否始终是类型,因为它可能取决于选择container

这个问题肯定是某个地方的常见问题解答?

编辑,它是:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18