2009-04-12 75 views
1

使用类似vectorlist等的容器类时,可以通过编写vector<type>::value_type来使用元素的类型。使用在模板参数中定义的类型

但是,下面的代码

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

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

回答

12

你缺少所需的typename关键字:

typedef typename container::value_type elementtype; 

这是因为container在这个模板从属名称,所以编译器有没有办法知道容器:: VALUE_TYPE是否始终是一个键入与否,因为它可能取决于container的选择。

这个问题肯定是一个常见问题吗?

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