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

tst*_*ner 1 c++ templates

当使用像vector,list等等的容器类时,我可以通过写入来使用元素的类型vector<type>::value_type.

但是,以下代码

template<class container>
void foo(container& c)
{
    typedef container::value_type elementtype;
    elementtype b;
}
Run Code Online (Sandbox Code Playgroud)

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

CB *_*ley 12

您缺少必需的typename关键字:

typedef typename container::value_type elementtype;
Run Code Online (Sandbox Code Playgroud)

这是因为在这个模板中container是一个依赖名称,所以编译器无法知道container :: value_type是否总是一个类型,因为它可能取决于选择container.

当然这个问题在某个地方是常见问题吗?

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