当使用像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