【问题标题】:Using types defined in template arguments使用模板参数中定义的类型
【发布时间】:2009-04-12 10:56:09
【问题描述】:

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

但是,下面的代码

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

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

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    您缺少必需的 typename 关键字:

    typedef typename container::value_type elementtype;
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2022-01-14
      • 2023-01-03
      相关资源
      最近更新 更多