代码之家  ›  专栏  ›  技术社区  ›  chila

不能引用嵌套在模板参数中的模板名称

c++
  •  8
  • chila  · 技术社区  · 16 年前

    template <typename Provider>
    inline void use()
    {
        typedef Provider::Data<int> D;
    }
    

    在这里,我基本上尝试使用某个“Provider”类的模板类成员“Data”,应用于“int”,但出现以下错误:

    util.cpp:5: error: expected init-declarator before '<' token
    util.cpp:5: error: expected `,' or `;' before '<' token
    

    2 回复  |  直到 16 年前
        1
  •  16
  •   sbi    16 年前
    typedef typename Provider::template Data<int> D;
    

    问题是,当编译器解析 use() Provider Provider::Data 指。它可以是静态数据成员、成员函数的名称或其他内容。所以你必须把 typename
    template Data < ... 可能是个比较。

        2
  •  8
  •   James McNellis    16 年前

    你需要一个 typename template :

    template <typename Provider>
    inline void use()
    {
        typedef typename Provider::template Data<int> D;
    }