使用vector
,list
等容器类时,我可以通过编写vector<type>::value_type
来使用元素的类型。
但是,以下代码
template<class container>
void foo(container& c)
{
typedef container::value_type elementtype;
elementtype b;
}
失败,错误为“expected initializer before ‘elementtype’
”。
当容器类型作为模板参数给出时是否可以推断元素类型,还是必须将元素类型作为额外的模板参数?
答案 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